Privacy policy

Last updated: October 16, 2023

The privacy of your data—and it is your data, not ours!—is a big deal to us. In this policy, we lay out: what data we collect and why; how your data is handled; and your rights with respect to your data. We promise we never sell your data: never have, never will.

This policy is split into sections. For your convenience, links to each of those sections is as follows:

This policy applies to all products built and maintained by RecurveLabs LLC.

This policy applies to our handling of information about site visitors, prospective customers, and customers and authorized users (in relation to their procurement of the services and management of their relationship with RecurveLabs). We refer collectively to these categories of individuals as "you" throughout this policy.

However, this policy does not cover information about a customer’s end users that RecurveLabs receives from a customer, or otherwise processes on a customer’s behalf, in connection with the services provided by RecurveLabs to the customer pursuant to an applicable services agreement (including the content of messages of customer end users ("End User Communications")). RecurveLabs processes End User Communications under the instructions of the relevant customer, which is the "data controller" or "business" (or occupies a similar role as defined in applicable privacy laws), as described in the applicable services agreement between such customer and RecurveLabs. RecurveLabs’s obligations as a "data processor" or "service provider" with respect to such information are defined in such services agreement and applicable data protection addendum and are not made part of this policy.

If you are a customer’s end user and you have questions about how your information is collected and processed through the services, please contact the organization who has provided your information to us for more information.

What we collect and why

Our guiding principle is to collect only what we need. Here’s what that means in practice:

Identity and access

When you sign up for a RecurveLabs product, we ask for identifying information such as your name, email address, and maybe a company name. That’s so you can personalize your new account, and we can send you product updates and other essential information. We may also send you optional surveys from time to time to help us understand how you use our products and to make improvements. With your consent, we will send you our newsletter and other updates. We sometimes also give you the option to add a profile picture that displays in our products.

We’ll never sell your personal information to third parties, and we won’t use your name or company in marketing statements without your permission either.

Billing information

If you sign up for a paid RecurveLabs product, you will be asked to provide your payment information and billing address. Credit card information is submitted directly to our payment processor and doesn’t hit RecurveLabs servers. We store a record of the payment transaction, including the last 4 digits of the credit card number, for purposes of account history, invoicing, and billing support. We store your billing address so we can charge you for service, calculate any sales tax due, send you invoices, and detect fraudulent credit card transactions. We occasionally use aggregate billing information to guide our marketing efforts.

Product interactions

We store on our servers the content that you upload or receive or maintain in your RecurveLabs product accounts. We keep this content as long as your account is active. If you delete your account, we’ll delete the content within 60 days.

General Geolocation data

For most of our products, we log the full IP address used to sign up a product account and retain that for use in mitigating future spammy signups. We also log all account access by full IP address for security and fraud prevention purposes, and we keep this login data for as long as your product account is active.

Website interactions

We collect information about your browsing activity for analytics and statistical purposes such as conversion rate testing and experimenting with new product designs. This includes, for example, your browser and operating system versions, your IP address, which web pages you visited and how long they took to load, and which website referred you to us. If you have an account and are signed in, these web analytics data are tied to your IP address and user account until your account is no longer active. The web analytics we use are described further in the Advertising and Cookies section.

Anti-bot assessments

We use CAPTCHA across our applications to mitigate brute force logins and as a means of spam protection. We have a legitimate interest in protecting our apps and the broader Internet community from credential stuffing attacks and spam. When you log into your RecurveLabs accounts and when you fill in certain forms in Recurve IP, the CAPTCHA service evaluates various information (e.g., IP address, how long the visitor has been on the app, mouse movements) to try to detect if the activity is from an automated program instead of a human. The CAPTCHA service then provides RecurveLabs with the spam score results; we do not have access to the evaluated information.

Advertising and Cookies

RecurveLabs runs contextual ads on various third-party platforms such as Google, Reddit, and LinkedIn. Users who click on one of our ads will be sent to the Recurve IP marketing site. Where permissible under law, we may load an ad-company script on their browsers that sets a third-party cookie and sends information to the ad network to enable evaluation of the effectiveness of our ads, e.g., which ad they clicked and which keyword triggered the ad, and whether they performed certain actions such as clicking a button or submitting a form.

We also use persistent first-party cookies and some third-party cookies to store certain preferences, make it easier for you to use our applications, and perform A/B testing as well as support some analytics.

A cookie is a piece of text stored by your browser. It may help remember login information and site preferences. It might also collect information such as your browser type, operating system, web pages visited, duration of visit, content viewed, and other click-stream data. You can adjust cookie retention settings and accept or block individual cookies in your browser settings, although our apps won’t work and other aspects of our service may not function properly if you turn cookies off.

Voluntary correspondence

When you email RecurveLabs with a question or to ask for help, we keep that correspondence, including your email address, so that we have a history of past correspondence to reference if you reach out in the future.

We also store information you may volunteer, for example, written responses to surveys. If you agree to a customer interview, we may ask for your permission to record the conversation for future reference or use. We will only do so with your express consent.

When we access or disclose your information

To provide products or services you’ve requested. We use some third-party subprocessors to help run our applications and provide the Services to you. You can view the third-party subprocessors we use for each of our products:

- Google Cloud Platform
- Google Workspace
- Google Analtyics
- Stripe
- Cloudflare
- Sentry

We may disclose your information at your direction if you integrate a third-party service into your use of our products.

No RecurveLabs human looks at your content except for limited purposes with your express permission, for example, if an error occurs that stops an automated process from working and requires manual intervention to fix. These are rare cases, and when they happen, we look for root cause solutions as much as possible to avoid them recurring. We may also access your data if required in order to respond to legal process (see "When required under applicable law" below).

To exclude you from seeing our ads. Where permissible by law and if you have a Recurve IP account, we may disclose a one-way hash of your email address with ad companies to exclude you from seeing our ads.

To help you troubleshoot or squash a software bug, with your permission. If at any point we need to access your content to help you with a support case, we will ask for your consent before proceeding.

To investigate, prevent, or take action regarding restricted uses Accessing a customer’s account when investigating potential abuse is a measure of last resort. We want to protect the privacy and safety of both our customers and the people reporting issues to us, and we do our best to balance those responsibilities throughout the process. If we discover you are using our products for a restricted purpose, we will take action as necessary, including notifying appropriate authorities where warranted.

Aggregated and de-identified data. We may aggregate and/or de-identify information collected through the services. We may use de-identified or aggregated data for any purpose, including marketing or analytics.

When required under applicable law. RecurveLabs is a U.S. company and all data infrastructure are located in the U.S.

Finally, if RecurveLabs is acquired by or merges with another company — we don’t plan on that, but if it happens — we’ll notify you well before any of your personal information is transferred or becomes subject to a different privacy policy.

Your rights with respect to your information

At RecurveLabs, we strive to apply the same data rights to all customers, regardless of their location. Some of these rights include:

Many of these rights can be exercised by signing in and updating your account information. Please note that certain information may be exempt from such requests under applicable law. For example, we need to retain certain information in order to provide our services to you.

In some cases, we also need to take reasonable steps to verify your identity before responding to a request, which may include, at a minimum, depending on the sensitivity of the information you are requesting and the type of request you are making, verifying your name and email address. If we are unable to verify you, we may be unable to respond to your requests. If you have questions about exercising these rights or need assistance, please contact us at privacy@RecurveLabs.com.

Depending on applicable law, you may have the right to appeal our decision to deny your request, if applicable. We will provide information about how to exercise that right in our response denying the request. You also have the right to lodge a complaint with a supervisory authority. If you are in the EU or UK, you can contact your data protection authority to file a complaint or learn more about local privacy laws.

How we secure your data

All data is encrypted via SSL/TLS when transmitted from our servers to your browser. The database backups are also encrypted. In addition, we go to great lengths to secure your data at rest.

What happens when you delete content in your product accounts

In many of our applications, we give you the option to trash content. Anything you trash in your product accounts while they are active will be kept in an accessible trash can for about 25 days. After that time, the trashed content cannot be accessed via the application and we are not able to retrieve it for you. The trashed content may remain on our active servers for another 30 days, and copies of the content may be held in backups of our application databases for up to another 30 days after that. Altogether, any content trashed in your product accounts should be purged from all of our systems and logs within 90 days.

If you choose to cancel your account, your content will become immediately inaccessible and should be purged from our systems in full within 60 days. This applies both for cases when an account owner directly cancels and for auto-canceled accounts.

Data retention

We keep your information for the time necessary for the purposes for which it is processed. The length of time for which we retain information depends on the purposes for which we collected and use it and your choices, after which time we may delete and/or aggregate it. We may also retain and use this information as necessary to comply with our legal obligations, resolve disputes, and enforce our agreements. Through this policy, we have provided specific retention periods for certain types of information.

Location of site and data

Our products and other web properties are operated in the United States. If you are located in the European Union, UK, or elsewhere outside of the United States, please be aware that any information you provide to us will be transferred to and stored in the United States. By using our websites or Services and/or providing us with your personal information, you consent to this transfer.

When transferring personal data from the EU

The European Data Protection Board (EDPB) has issued guidance that personal data transferred out of the EU must be treated with the same level of protection that is granted under EU privacy law. UK law provides similar safeguards for UK user data that is transferred out of the UK.

There are also a few ad hoc cases where EU personal data may be transferred to the U.S. in connection with RecurveLabs operations. Such transfers are only occasional and data is transferred under the Article 49(1)(b) derogation under GDPR and the UK version of GDPR.

Changes and questions

We may update this policy as needed to comply with relevant regulations and reflect any new practices. Whenever we make a significant change to our policies, we will refresh the date at the top of this page and take any other appropriate steps to notify users.

Have any questions, comments, or concerns about this privacy policy, your data, or your rights with respect to your information? Please get in touch by emailing us at privacy@recurveip.com and we’ll be happy to try to answer them!

DJDT

Versions

Package Name Version
Django 4.2.5
Python 3.11.7
allauth Allauth 0.56.1.final.0
channels Channels 4.0.0
debug_toolbar Debug Toolbar 4.2.0

Time

Resource usage

Resource Value
User CPU time 27.489 msec
System CPU time 0.000 msec
Total CPU time 27.489 msec
Elapsed time 32.846 msec
Context switches 111 voluntary, 0 involuntary

Browser timing

Timing attribute Timeline Milliseconds since navigation start (+length)

Settings from patentvuln.settings

Setting Value
ABSOLUTE_URL_OVERRIDES {}
ACCOUNT_ADAPTER 'patentvuln.adapters.UserProfileAdapter'
ACCOUNT_AUTHENTICATION_METHOD 'email'
ACCOUNT_DEFAULT_HTTP_PROTOCOL 'https'
ACCOUNT_EMAIL_REQUIRED True
ACCOUNT_EMAIL_VERIFICATION 'none'
ACCOUNT_FORMS {'signup': 'patentvuln.forms.InviteCodeSignupForm'}
ACCOUNT_SESSION_REMEMBER True
ACCOUNT_SIGNUP_PASSWORD_ENTER_TWICE '********************'
ACCOUNT_UNIQUE_EMAIL True
ACCOUNT_USERNAME_REQUIRED False
ADMINS []
ALLOWED_HOSTS ['127.0.0.1', 'localhost', 'app-staging-target-1-lsojkkp2ga-uw.a.run.app', 'staging.patentvuln.com', 'www.patentvuln.com', '8000-cs-718521704210-default.cs-us-east1-rtep.cloudshell.dev', 'staging.recurveip.com', 'www.recurveip.com', 'recurveip.com', 'recurveip.fly.dev']
APPEND_SLASH True
ASGI_APPLICATION 'patentvuln.asgi.application'
AUTHENTICATION_BACKENDS ['django.contrib.auth.backends.ModelBackend', 'allauth.account.auth_backends.AuthenticationBackend']
AUTH_PASSWORD_VALIDATORS '********************'
AUTH_USER_MODEL 'auth.User'
BASE_DIR PosixPath('/app')
CACHES {'default': {'BACKEND': 'django.core.cache.backends.db.DatabaseCache', 'LOCATION': 'cache_table', 'OPTIONS': {'MAX_ENTRIES': 1024}, 'TIMEOUT': None}, 'patent': {'BACKEND': 'patentvuln.cache.FastFileBackend', 'LOCATION': '/root/app_cache', 'OPTIONS': {'MAX_ENTRIES': -1}, 'TIMEOUT': None}}
CACHE_MIDDLEWARE_ALIAS 'default'
CACHE_MIDDLEWARE_KEY_PREFIX '********************'
CACHE_MIDDLEWARE_SECONDS 600
CSRF_COOKIE_AGE 31449600
CSRF_COOKIE_DOMAIN None
CSRF_COOKIE_HTTPONLY False
CSRF_COOKIE_MASKED False
CSRF_COOKIE_NAME 'csrftoken'
CSRF_COOKIE_PATH '/'
CSRF_COOKIE_SAMESITE 'Lax'
CSRF_COOKIE_SECURE False
CSRF_FAILURE_VIEW 'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME 'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS ['https://127.0.0.1', 'https://localhost', 'https://app-staging-target-1-lsojkkp2ga-uw.a.run.app', 'https://staging.patentvuln.com', 'https://www.patentvuln.com', 'https://8000-cs-718521704210-default.cs-us-east1-rtep.cloudshell.dev', 'https://staging.recurveip.com', 'https://www.recurveip.com', 'https://recurveip.com', 'https://recurveip.fly.dev']
CSRF_USE_SESSIONS False
DATABASES {'default': {'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_HEALTH_CHECKS': False, 'CONN_MAX_AGE': 0, 'ENGINE': 'django.db.backends.sqlite3', 'HOST': '', 'NAME': '/data/db.sqlite', 'OPTIONS': {'timeout': 20}, 'PASSWORD': '********************', 'PORT': '', 'TEST': {'CHARSET': None, 'COLLATION': None, 'MIGRATE': True, 'MIRROR': None, 'NAME': None}, 'TIME_ZONE': None, 'USER': ''}}
DATABASE_ROUTERS []
DATA_UPLOAD_MAX_MEMORY_SIZE 2621440
DATA_UPLOAD_MAX_NUMBER_FIELDS 1000
DATA_UPLOAD_MAX_NUMBER_FILES 100
DATETIME_FORMAT 'N j, Y, P'
DATETIME_INPUT_FORMATS ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M']
DATE_FORMAT 'N j, Y'
DATE_INPUT_FORMATS ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y']
DEBUG True
DEBUG_PROPAGATE_EXCEPTIONS False
DECIMAL_SEPARATOR '.'
DEFAULT_AUTO_FIELD 'django.db.models.BigAutoField'
DEFAULT_CHARSET 'utf-8'
DEFAULT_EXCEPTION_REPORTER 'django.views.debug.ExceptionReporter'
DEFAULT_EXCEPTION_REPORTER_FILTER 'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FILE_STORAGE 'django.core.files.storage.FileSystemStorage'
DEFAULT_FROM_EMAIL 'webmaster@localhost'
DEFAULT_INDEX_TABLESPACE ''
DEFAULT_TABLESPACE ''
DEMO '6275255'
DEMO_FAMILY_IDS ['26871479']
DEMO_PATENTS ['7110808', '5929901', '6452626', '5986693', '8885034', '9667896', '7067276', '7002621', '7030904', '6316215', '9307895', '6753160', '6982742', '6984498', '6190877', '6982740', '6862036', '6275255', '9186052', '9198565', '6211904', '6750037', '6043839', '6310642', '6424369', '6086528']
DISALLOWED_USER_AGENTS []
DJSTRIPE_FOREIGN_KEY_TO_FIELD '********************'
DJSTRIPE_USE_NATIVE_JSONFIELD True
DJSTRIPE_WEBHOOK_SECRET '********************'
EMAIL_BACKEND 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST 'localhost'
EMAIL_HOST_PASSWORD '********************'
EMAIL_HOST_USER ''
EMAIL_PORT 25
EMAIL_SSL_CERTFILE None
EMAIL_SSL_KEYFILE '********************'
EMAIL_SUBJECT_PREFIX '[Django] '
EMAIL_TIMEOUT None
EMAIL_USE_LOCALTIME False
EMAIL_USE_SSL False
EMAIL_USE_TLS False
ENABLE_SENTRY True
ENABLE_SIGNUPS True
FILE_UPLOAD_DIRECTORY_PERMISSIONS None
FILE_UPLOAD_HANDLERS ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE 2621440
FILE_UPLOAD_PERMISSIONS 420
FILE_UPLOAD_TEMP_DIR None
FIRST_DAY_OF_WEEK 0
FIXTURE_DIRS []
FORCE_SCRIPT_NAME None
FORMAT_MODULE_PATH None
FORM_RENDERER 'django.forms.renderers.DjangoTemplates'
HOST 'https://staging.recurveip.com'
IGNORABLE_404_URLS []
INSTALLED_APPS ['channels', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'tailwind', 'theme', 'django_browser_reload', 'allauth', 'allauth.account', 'allauth.socialaccount', 'allauth.socialaccount.providers.google', 'django_unicorn', 'debug_toolbar', 'djstripe', 'patentvuln']
INTERNAL_IPS ['127.0.0.1', '47.151.155.187']
LANGUAGES [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ar-dz', 'Algerian Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('ckb', 'Central Kurdish (Sorani)'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('ig', 'Igbo'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('ky', 'Kyrgyz'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('ms', 'Malay'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('tg', 'Tajik'), ('th', 'Thai'), ('tk', 'Turkmen'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('uz', 'Uzbek'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')]
LANGUAGES_BIDI ['he', 'ar', 'ar-dz', 'ckb', 'fa', 'ur']
LANGUAGE_CODE 'en-us'
LANGUAGE_COOKIE_AGE None
LANGUAGE_COOKIE_DOMAIN None
LANGUAGE_COOKIE_HTTPONLY False
LANGUAGE_COOKIE_NAME 'django_language'
LANGUAGE_COOKIE_PATH '/'
LANGUAGE_COOKIE_SAMESITE None
LANGUAGE_COOKIE_SECURE False
LOCALE_PATHS []
LOGGING {}
LOGGING_CONFIG 'logging.config.dictConfig'
LOGIN_REDIRECT_URL 'search'
LOGIN_URL '/accounts/login/'
LOGOUT_REDIRECT_URL None
MAGIC_KEY '********************'
MANAGERS []
MEDIA_ROOT ''
MEDIA_URL '/'
MESSAGE_STORAGE 'django.contrib.messages.storage.fallback.FallbackStorage'
MIDDLEWARE ['debug_toolbar.middleware.DebugToolbarMiddleware', 'django.middleware.security.SecurityMiddleware', 'whitenoise.middleware.WhiteNoiseMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'allauth.account.middleware.AccountMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django_browser_reload.middleware.BrowserReloadMiddleware']
MIGRATION_MODULES {}
MONTH_DAY_FORMAT 'F j'
NUMBER_GROUPING 0
OPENAI_API_KEY '********************'
PASSWORD_HASHERS '********************'
PASSWORD_RESET_TIMEOUT '********************'
PREPEND_WWW False
PROMPTLAYER_KEY '********************'
ROOT_URLCONF 'patentvuln.urls'
SECRET_KEY '********************'
SECRET_KEY_FALLBACKS '********************'
SECURE_CONTENT_TYPE_NOSNIFF True
SECURE_CROSS_ORIGIN_OPENER_POLICY 'same-origin'
SECURE_HSTS_INCLUDE_SUBDOMAINS False
SECURE_HSTS_PRELOAD False
SECURE_HSTS_SECONDS 0
SECURE_PROXY_SSL_HEADER None
SECURE_REDIRECT_EXEMPT []
SECURE_REFERRER_POLICY 'same-origin'
SECURE_SSL_HOST None
SECURE_SSL_REDIRECT False
SERVER_EMAIL 'root@localhost'
SESSION_CACHE_ALIAS 'default'
SESSION_COOKIE_AGE 1209600
SESSION_COOKIE_DOMAIN None
SESSION_COOKIE_HTTPONLY True
SESSION_COOKIE_NAME 'sessionid'
SESSION_COOKIE_PATH '/'
SESSION_COOKIE_SAMESITE 'Lax'
SESSION_COOKIE_SECURE False
SESSION_ENGINE 'django.contrib.sessions.backends.db'
SESSION_EXPIRE_AT_BROWSER_CLOSE False
SESSION_FILE_PATH None
SESSION_SAVE_EVERY_REQUEST False
SESSION_SERIALIZER 'django.contrib.sessions.serializers.JSONSerializer'
SETTINGS_MODULE 'patentvuln.settings'
SHORT_DATETIME_FORMAT 'm/d/Y P'
SHORT_DATE_FORMAT 'm/d/Y'
SIGNING_BACKEND 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS []
SOCIALACCOUNT_ADAPTER 'patentvuln.adapters.SocialProfileAdater'
SOCIALACCOUNT_AUTO_SIGNUP False
SOCIALACCOUNT_FORMS {'signup': 'patentvuln.forms.SocialInviteCodeSignupForm'}
SOCIALACCOUNT_PROVIDERS {'google': {'APP': {'client_id': '466359208574-1501s3nta8diul5sim3q3q7k6bv5mhp3.apps.googleusercontent.com', 'secret': '********************'}}}
STATICFILES_DIRS []
STATICFILES_FINDERS ['django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder']
STATICFILES_STORAGE 'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT '/app/staticfiles'
STATIC_URL '/static/'
STORAGES {'default': {'BACKEND': 'django.core.files.storage.FileSystemStorage'}, 'staticfiles': {'BACKEND': 'django.contrib.staticfiles.storage.StaticFilesStorage'}}
STRIPE_COUPON_ID 'TRIAL'
STRIPE_DEFAULT_PRODUCT_ID 'prod_OwJKXEJQp4Q6O0'
STRIPE_ENABLED_PRODUCTS ['prod_OwJKXEJQp4Q6O0', 'prod_P530oi67H1ja0h']
STRIPE_LIVE_MODE False
STRIPE_LIVE_SECRET_KEY '********************'
STRIPE_PORTAL_LINK 'https://billing.stripe.com/p/login/test_7sI6qcbKzcaAcg09AA'
STRIPE_PUBLIC_KEY '********************'
STRIPE_TEST_SECRET_KEY '********************'
TAILWIND_APP_NAME 'theme'
TEMPLATES [{'APP_DIRS': True, 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages']}}]
TEST_NON_SERIALIZED_APPS []
TEST_RUNNER 'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR ','
TIME_FORMAT 'P'
TIME_INPUT_FORMATS ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
TIME_ZONE 'UTC'
USE_DEPRECATED_PYTZ False
USE_I18N True
USE_L10N True
USE_THOUSAND_SEPARATOR False
USE_TZ True
USE_X_FORWARDED_HOST False
USE_X_FORWARDED_PORT False
WSGI_APPLICATION 'patentvuln.wsgi.application'
X_FRAME_OPTIONS 'DENY'
YEAR_MONTH_FORMAT 'F Y'

Headers

Request headers

Key Value
Accept */*
Accept-Encoding gzip, br, zstd, deflate
Forwarded for="216.73.216.200";proto=https
Host staging.patentvuln.com
Traceparent 00-275969ae5fec636e1acc6a34e62e946c-93549e69b6b776e1-01
User-Agent Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
X-Cloud-Trace-Context 275969ae5fec636e1acc6a34e62e946c/10616284398493333217;o=1
X-Forwarded-For 169.254.169.126
X-Forwarded-Host staging.patentvuln.com
X-Forwarded-Proto http

Response headers

Key Value
Content-Length 25062
Content-Type text/html; charset=utf-8
Cross-Origin-Opener-Policy same-origin
Referrer-Policy same-origin
Vary Cookie
X-Content-Type-Options nosniff
X-Frame-Options DENY

WSGI environ

Since the WSGI environ inherits the environment of the server, only a significant subset is shown below.

Key Value
PATH_INFO /privacy
QUERY_STRING
REMOTE_ADDR 127.0.0.1
REQUEST_METHOD GET
SCRIPT_NAME
SERVER_NAME 0.0.0.0
SERVER_PORT 8000
SERVER_PROTOCOL HTTP/1.1
SERVER_SOFTWARE gunicorn/21.2.0

Request

View information

View function Arguments Keyword arguments URL name
patentvuln.views.privacy () {} <unavailable>

No cookies

No session data

No GET data

No POST data

SQL queries from 0 connections

No SQL queries were recorded during this request.

Static files (159 found, 3 used)

Static file paths

None

Static file apps

  1. django.contrib.admin
  2. theme
  3. django_browser_reload
  4. django_unicorn
  5. debug_toolbar

Static files

css/dist/styles.css
/app/theme/static/css/dist/styles.css
django-browser-reload/reload-listener.js
/usr/local/lib/python3.11/site-packages/django_browser_reload/static/django-browser-reload/reload-listener.js
django-browser-reload/reload-worker.js
/usr/local/lib/python3.11/site-packages/django_browser_reload/static/django-browser-reload/reload-worker.js

django.contrib.staticfiles.finders.AppDirectoriesFinder (159 files)

Path Location
admin/css/autocomplete.css /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/css/autocomplete.css
admin/css/base.css /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/css/base.css
admin/css/changelists.css /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/css/changelists.css
admin/css/dark_mode.css /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/css/dark_mode.css
admin/css/dashboard.css /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/css/dashboard.css
admin/css/forms.css /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/css/forms.css
admin/css/login.css /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/css/login.css
admin/css/nav_sidebar.css /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/css/nav_sidebar.css
admin/css/responsive.css /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/css/responsive.css
admin/css/responsive_rtl.css /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/css/responsive_rtl.css
admin/css/rtl.css /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/css/rtl.css
admin/css/widgets.css /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/css/widgets.css
admin/css/vendor/select2/LICENSE-SELECT2.md /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/css/vendor/select2/LICENSE-SELECT2.md
admin/css/vendor/select2/select2.css /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/css/vendor/select2/select2.css
admin/css/vendor/select2/select2.min.css /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/css/vendor/select2/select2.min.css
admin/img/LICENSE /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/LICENSE
admin/img/README.txt /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/README.txt
admin/img/calendar-icons.svg /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/calendar-icons.svg
admin/img/icon-addlink.svg /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/icon-addlink.svg
admin/img/icon-alert.svg /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/icon-alert.svg
admin/img/icon-calendar.svg /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/icon-calendar.svg
admin/img/icon-changelink.svg /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/icon-changelink.svg
admin/img/icon-clock.svg /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/icon-clock.svg
admin/img/icon-deletelink.svg /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/icon-deletelink.svg
admin/img/icon-no.svg /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/icon-no.svg
admin/img/icon-unknown-alt.svg /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/icon-unknown-alt.svg
admin/img/icon-unknown.svg /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/icon-unknown.svg
admin/img/icon-viewlink.svg /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/icon-viewlink.svg
admin/img/icon-yes.svg /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/icon-yes.svg
admin/img/inline-delete.svg /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/inline-delete.svg
admin/img/search.svg /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/search.svg
admin/img/selector-icons.svg /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/selector-icons.svg
admin/img/sorting-icons.svg /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/sorting-icons.svg
admin/img/tooltag-add.svg /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/tooltag-add.svg
admin/img/tooltag-arrowright.svg /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/tooltag-arrowright.svg
admin/img/gis/move_vertex_off.svg /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/gis/move_vertex_off.svg
admin/img/gis/move_vertex_on.svg /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/gis/move_vertex_on.svg
admin/js/SelectBox.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/SelectBox.js
admin/js/SelectFilter2.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/SelectFilter2.js
admin/js/actions.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/actions.js
admin/js/autocomplete.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/autocomplete.js
admin/js/calendar.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/calendar.js
admin/js/cancel.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/cancel.js
admin/js/change_form.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/change_form.js
admin/js/collapse.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/collapse.js
admin/js/core.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/core.js
admin/js/filters.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/filters.js
admin/js/inlines.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/inlines.js
admin/js/jquery.init.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/jquery.init.js
admin/js/nav_sidebar.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/nav_sidebar.js
admin/js/popup_response.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/popup_response.js
admin/js/prepopulate.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/prepopulate.js
admin/js/prepopulate_init.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/prepopulate_init.js
admin/js/theme.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/theme.js
admin/js/urlify.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/urlify.js
admin/js/admin/DateTimeShortcuts.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/admin/DateTimeShortcuts.js
admin/js/admin/RelatedObjectLookups.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/admin/RelatedObjectLookups.js
admin/js/vendor/jquery/LICENSE.txt /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/jquery/LICENSE.txt
admin/js/vendor/jquery/jquery.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/jquery/jquery.js
admin/js/vendor/jquery/jquery.min.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/jquery/jquery.min.js
admin/js/vendor/select2/LICENSE.md /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/LICENSE.md
admin/js/vendor/select2/select2.full.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/select2.full.js
admin/js/vendor/select2/select2.full.min.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/select2.full.min.js
admin/js/vendor/select2/i18n/af.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/af.js
admin/js/vendor/select2/i18n/ar.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ar.js
admin/js/vendor/select2/i18n/az.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/az.js
admin/js/vendor/select2/i18n/bg.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/bg.js
admin/js/vendor/select2/i18n/bn.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/bn.js
admin/js/vendor/select2/i18n/bs.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/bs.js
admin/js/vendor/select2/i18n/ca.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ca.js
admin/js/vendor/select2/i18n/cs.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/cs.js
admin/js/vendor/select2/i18n/da.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/da.js
admin/js/vendor/select2/i18n/de.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/de.js
admin/js/vendor/select2/i18n/dsb.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/dsb.js
admin/js/vendor/select2/i18n/el.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/el.js
admin/js/vendor/select2/i18n/en.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/en.js
admin/js/vendor/select2/i18n/es.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/es.js
admin/js/vendor/select2/i18n/et.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/et.js
admin/js/vendor/select2/i18n/eu.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/eu.js
admin/js/vendor/select2/i18n/fa.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/fa.js
admin/js/vendor/select2/i18n/fi.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/fi.js
admin/js/vendor/select2/i18n/fr.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/fr.js
admin/js/vendor/select2/i18n/gl.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/gl.js
admin/js/vendor/select2/i18n/he.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/he.js
admin/js/vendor/select2/i18n/hi.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hi.js
admin/js/vendor/select2/i18n/hr.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hr.js
admin/js/vendor/select2/i18n/hsb.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hsb.js
admin/js/vendor/select2/i18n/hu.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hu.js
admin/js/vendor/select2/i18n/hy.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hy.js
admin/js/vendor/select2/i18n/id.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/id.js
admin/js/vendor/select2/i18n/is.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/is.js
admin/js/vendor/select2/i18n/it.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/it.js
admin/js/vendor/select2/i18n/ja.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ja.js
admin/js/vendor/select2/i18n/ka.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ka.js
admin/js/vendor/select2/i18n/km.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/km.js
admin/js/vendor/select2/i18n/ko.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ko.js
admin/js/vendor/select2/i18n/lt.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/lt.js
admin/js/vendor/select2/i18n/lv.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/lv.js
admin/js/vendor/select2/i18n/mk.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/mk.js
admin/js/vendor/select2/i18n/ms.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ms.js
admin/js/vendor/select2/i18n/nb.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/nb.js
admin/js/vendor/select2/i18n/ne.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ne.js
admin/js/vendor/select2/i18n/nl.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/nl.js
admin/js/vendor/select2/i18n/pl.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/pl.js
admin/js/vendor/select2/i18n/ps.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ps.js
admin/js/vendor/select2/i18n/pt-BR.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/pt-BR.js
admin/js/vendor/select2/i18n/pt.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/pt.js
admin/js/vendor/select2/i18n/ro.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ro.js
admin/js/vendor/select2/i18n/ru.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ru.js
admin/js/vendor/select2/i18n/sk.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sk.js
admin/js/vendor/select2/i18n/sl.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sl.js
admin/js/vendor/select2/i18n/sq.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sq.js
admin/js/vendor/select2/i18n/sr-Cyrl.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sr-Cyrl.js
admin/js/vendor/select2/i18n/sr.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sr.js
admin/js/vendor/select2/i18n/sv.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sv.js
admin/js/vendor/select2/i18n/th.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/th.js
admin/js/vendor/select2/i18n/tk.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/tk.js
admin/js/vendor/select2/i18n/tr.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/tr.js
admin/js/vendor/select2/i18n/uk.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/uk.js
admin/js/vendor/select2/i18n/vi.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/vi.js
admin/js/vendor/select2/i18n/zh-CN.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/zh-CN.js
admin/js/vendor/select2/i18n/zh-TW.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/zh-TW.js
admin/js/vendor/xregexp/LICENSE.txt /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/xregexp/LICENSE.txt
admin/js/vendor/xregexp/xregexp.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/xregexp/xregexp.js
admin/js/vendor/xregexp/xregexp.min.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/xregexp/xregexp.min.js
css/.gitignore /app/theme/static/css/.gitignore
css/highcharts.css /app/theme/static/css/highcharts.css
css/dist/styles.css /app/theme/static/css/dist/styles.css
js/accessibility.js /app/theme/static/js/accessibility.js
js/exporting.js /app/theme/static/js/exporting.js
js/highcharts-more.js /app/theme/static/js/highcharts-more.js
js/highcharts.js /app/theme/static/js/highcharts.js
js/mermaid.min.js /app/theme/static/js/mermaid.min.js
js/svg-pan-zoom.js /app/theme/static/js/svg-pan-zoom.js
django-browser-reload/reload-listener.js /usr/local/lib/python3.11/site-packages/django_browser_reload/static/django-browser-reload/reload-listener.js
django-browser-reload/reload-worker.js /usr/local/lib/python3.11/site-packages/django_browser_reload/static/django-browser-reload/reload-worker.js
unicorn/js/.babelrc.json /usr/local/lib/python3.11/site-packages/django_unicorn/static/unicorn/js/.babelrc.json
unicorn/js/attribute.js /usr/local/lib/python3.11/site-packages/django_unicorn/static/unicorn/js/attribute.js
unicorn/js/component.js /usr/local/lib/python3.11/site-packages/django_unicorn/static/unicorn/js/component.js
unicorn/js/delayers.js /usr/local/lib/python3.11/site-packages/django_unicorn/static/unicorn/js/delayers.js
unicorn/js/element.js /usr/local/lib/python3.11/site-packages/django_unicorn/static/unicorn/js/element.js
unicorn/js/eventListeners.js /usr/local/lib/python3.11/site-packages/django_unicorn/static/unicorn/js/eventListeners.js
unicorn/js/messageSender.js /usr/local/lib/python3.11/site-packages/django_unicorn/static/unicorn/js/messageSender.js
unicorn/js/morpher.js /usr/local/lib/python3.11/site-packages/django_unicorn/static/unicorn/js/morpher.js
unicorn/js/store.js /usr/local/lib/python3.11/site-packages/django_unicorn/static/unicorn/js/store.js
unicorn/js/unicorn.js /usr/local/lib/python3.11/site-packages/django_unicorn/static/unicorn/js/unicorn.js
unicorn/js/unicorn.min.js /usr/local/lib/python3.11/site-packages/django_unicorn/static/unicorn/js/unicorn.min.js
unicorn/js/utils.js /usr/local/lib/python3.11/site-packages/django_unicorn/static/unicorn/js/utils.js
unicorn/js/morphdom/2.6.1/morphdom-umd.min.js /usr/local/lib/python3.11/site-packages/django_unicorn/static/unicorn/js/morphdom/2.6.1/morphdom-umd.min.js
unicorn/js/morphdom/2.6.1/morphdom.js /usr/local/lib/python3.11/site-packages/django_unicorn/static/unicorn/js/morphdom/2.6.1/morphdom.js
unicorn/js/morphers/alpine.js /usr/local/lib/python3.11/site-packages/django_unicorn/static/unicorn/js/morphers/alpine.js
unicorn/js/morphers/morphdom.js /usr/local/lib/python3.11/site-packages/django_unicorn/static/unicorn/js/morphers/morphdom.js
debug_toolbar/css/print.css /usr/local/lib/python3.11/site-packages/debug_toolbar/static/debug_toolbar/css/print.css
debug_toolbar/css/toolbar.css /usr/local/lib/python3.11/site-packages/debug_toolbar/static/debug_toolbar/css/toolbar.css
debug_toolbar/js/history.js /usr/local/lib/python3.11/site-packages/debug_toolbar/static/debug_toolbar/js/history.js
debug_toolbar/js/redirect.js /usr/local/lib/python3.11/site-packages/debug_toolbar/static/debug_toolbar/js/redirect.js
debug_toolbar/js/timer.js /usr/local/lib/python3.11/site-packages/debug_toolbar/static/debug_toolbar/js/timer.js
debug_toolbar/js/toolbar.js /usr/local/lib/python3.11/site-packages/debug_toolbar/static/debug_toolbar/js/toolbar.js
debug_toolbar/js/utils.js /usr/local/lib/python3.11/site-packages/debug_toolbar/static/debug_toolbar/js/utils.js

Templates (3 rendered)

Template paths

None

Templates

markdown.html
/app/theme/templates/markdown.html
Toggle context {'False': False, 'None': None, 'True': True} {'DEFAULT_MESSAGE_LEVELS': {'DEBUG': 10, 'ERROR': 40, 'INFO': 20, 'SUCCESS': 25, 'WARNING': 30}, 'csrf_token': <SimpleLazyObject: 'YQvbuYvuRGyLW33J5fW6RciOlOjGOs0zpADvg9KKbpVBcjm0EmQu7I1WE9Pf1aCg'>, 'debug': True, 'messages': <FallbackStorage: request=<WSGIRequest: GET '/privacy'>>, 'perms': PermWrapper(<SimpleLazyObject: <django.contrib.auth.models.AnonymousUser object at 0x7fb95a37ddd0>>), 'request': '<<request>>', 'sql_queries': <function debug.<locals>.<lambda> at 0x7fb95a44fd80>, 'user': <SimpleLazyObject: <django.contrib.auth.models.AnonymousUser object at 0x7fb95a37ddd0>>} {'markdown': '<h1>Privacy policy</h1>\n' '<p><em>Last updated: October 16, 2023</em></p>\n' '<p>The privacy of your data—and it is your data, not ours!—is a ' 'big deal to us. In this policy, we lay out: what data we collect ' 'and why; how your data is handled; and your rights with respect ' 'to your data. We promise we never sell your data: never have, ' 'never will.</p>\n' '<p>This policy is split into sections. For your convenience, ' 'links to each of those sections is as follows:</p>\n' '<ul>\n' '<li><a href="#privacy-policy">Privacy policy</a></li>\n' '<li><a href="#what-we-collect-and-why">What we collect and ' 'why</a></li>\n' '<li><a href="#when-we-access-or-disclose-your-information">When ' 'we access or disclose your information</a></li>\n' '<li><a href="#your-rights-with-respect-to-your-information">Your ' 'rights with respect to your information</a></li>\n' '<li><a href="#how-we-secure-your-data">How we secure your ' 'data</a></li>\n' '<li><a ' 'href="#what-happens-when-you-delete-content-in-your-product-accounts">What ' 'happens when you delete content in your product ' 'accounts</a></li>\n' '<li><a href="#data-retention">Data retention</a></li>\n' '<li><a href="#location-of-site-and-data">Location of site and ' 'data</a></li>\n' '<li><a href="#when-transferring-personal-data-from-the-eu">When ' 'transferring personal data from the EU</a></li>\n' '<li><a href="#changes-and-questions">Changes and ' 'questions</a></li>\n' '</ul>\n' '<p>This policy applies to all products built and maintained by ' 'RecurveLabs LLC.</p>\n' '<p>This policy applies to our handling of information about site ' 'visitors, prospective customers, and customers and authorized ' 'users (in relation to their procurement of the services and ' 'management of their relationship with RecurveLabs). We refer ' 'collectively to these categories of individuals as "you" ' 'throughout this policy.</p>\n' '<p>However, this policy does not cover information about a ' 'customer’s end users that RecurveLabs receives from a customer, ' 'or otherwise processes on a customer’s behalf, in connection ' 'with the services provided by RecurveLabs to the customer ' 'pursuant to an applicable services agreement (including the ' 'content of messages of customer end users ("End User ' 'Communications")). RecurveLabs processes End User Communications ' 'under the instructions of the relevant customer, which is the ' '"data controller" or "business" (or occupies a similar role as ' 'defined in applicable privacy laws), as described in the ' 'applicable services agreement between such customer and ' 'RecurveLabs. RecurveLabs’s obligations as a "data processor" or ' '"service provider" with respect to such information are defined ' 'in such services agreement and applicable data protection ' 'addendum and are not made part of this policy.</p>\n' '<p>If you are a customer’s end user and you have questions about ' 'how your information is collected and processed through the ' 'services, please contact the organization who has provided your ' 'information to us for more information.</p>\n' '<h2>What we collect and why</h2>\n' '<p>Our guiding principle is to collect only what we need. Here’s ' 'what that means in practice:</p>\n' '<h3>Identity and access</h3>\n' '<p>When you sign up for a RecurveLabs product, we ask for ' 'identifying information such as your name, email address, and ' 'maybe a company name. That’s so you can personalize your new ' 'account, and we can send you product updates and other essential ' 'information. We may also send you optional surveys from time to ' 'time to help us understand how you use our products and to make ' 'improvements. With your consent, we will send you our newsletter ' 'and other updates. We sometimes also give you the option to add ' 'a profile picture that displays in our products.</p>\n' '<p>We’ll never sell your personal information to third parties, ' 'and we won’t use your name or company in marketing statements ' 'without your permission either.</p>\n' '<h3>Billing information</h3>\n' '<p>If you sign up for a paid RecurveLabs product, you will be ' 'asked to provide your payment information and billing address. ' 'Credit card information is submitted directly to our payment ' 'processor and doesn’t hit RecurveLabs servers. We store a record ' 'of the payment transaction, including the last 4 digits of the ' 'credit card number, for purposes of account history, invoicing, ' 'and billing support. We store your billing address so we can ' 'charge you for service, calculate any sales tax due, send you ' 'invoices, and detect fraudulent credit card transactions. We ' 'occasionally use aggregate billing information to guide our ' 'marketing efforts.</p>\n' '<h3>Product interactions</h3>\n' '<p>We store on our servers the content that you upload or ' 'receive or maintain in your RecurveLabs product accounts. We ' 'keep this content as long as your account is active. If you ' 'delete your account, we’ll delete the content within 60 ' 'days.</p>\n' '<h3>General Geolocation data</h3>\n' '<p>For most of our products, we log the full IP address used to ' 'sign up a product account and retain that for use in mitigating ' 'future spammy signups. We also log all account access by full IP ' 'address for security and fraud prevention purposes, and we keep ' 'this login data for as long as your product account is ' 'active.</p>\n' '<h3>Website interactions</h3>\n' '<p>We collect information about your browsing activity for ' 'analytics and statistical purposes such as conversion rate ' 'testing and experimenting with new product designs. This ' 'includes, for example, your browser and operating system ' 'versions, your IP address, which web pages you visited and how ' 'long they took to load, and which website referred you to us. If ' 'you have an account and are signed in, these web analytics data ' 'are tied to your IP address and user account until your account ' 'is no longer active. The web analytics we use are described ' 'further in the Advertising and Cookies section.</p>\n' '<h3>Anti-bot assessments</h3>\n' '<p>We use <a ' 'href="https://en.wikipedia.org/wiki/CAPTCHA">CAPTCHA</a> across ' 'our applications to mitigate brute force logins and as a means ' 'of spam protection. We have a legitimate interest in protecting ' 'our apps and the broader Internet community from credential ' 'stuffing attacks and spam. When you log into your RecurveLabs ' 'accounts and when you fill in certain forms in Recurve IP, the ' 'CAPTCHA service evaluates various information (e.g., IP address, ' 'how long the visitor has been on the app, mouse movements) to ' 'try to detect if the activity is from an automated program ' 'instead of a human. The CAPTCHA service then provides ' 'RecurveLabs with the spam score results; we do not have access ' 'to the evaluated information.</p>\n' '<h3>Advertising and Cookies</h3>\n' '<p>RecurveLabs runs contextual ads on various third-party ' 'platforms such as Google, Reddit, and LinkedIn. Users who click ' 'on one of our ads will be sent to the Recurve IP marketing site. ' 'Where permissible under law, we may load an ad-company script on ' 'their browsers that sets a third-party cookie and sends ' 'information to the ad network to enable evaluation of the ' 'effectiveness of our ads, e.g., which ad they clicked and which ' 'keyword triggered the ad, and whether they performed certain ' 'actions such as clicking a button or submitting a form.</p>\n' '<p>We also use persistent first-party cookies and some ' 'third-party cookies to store certain preferences, make it easier ' 'for you to use our applications, and perform A/B testing as well ' 'as support some analytics.</p>\n' '<p>A cookie is a piece of text stored by your browser. It may ' 'help remember login information and site preferences. It might ' 'also collect information such as your browser type, operating ' 'system, web pages visited, duration of visit, content viewed, ' 'and other click-stream data. You can adjust cookie retention ' 'settings and accept or block individual cookies in your browser ' 'settings, although our apps won’t work and other aspects of our ' 'service may not function properly if you turn cookies off.</p>\n' '<h3>Voluntary correspondence</h3>\n' '<p>When you email RecurveLabs with a question or to ask for ' 'help, we keep that correspondence, including your email address, ' 'so that we have a history of past correspondence to reference if ' 'you reach out in the future.</p>\n' '<p>We also store information you may volunteer, for example, ' 'written responses to surveys. If you agree to a customer ' 'interview, we may ask for your permission to record the ' 'conversation for future reference or use. We will only do so ' 'with your express consent.</p>\n' '<h2>When we access or disclose your information</h2>\n' '<p><strong>To provide products or services you’ve ' 'requested</strong>. We use some third-party subprocessors to ' 'help run our applications and provide the Services to you. You ' 'can view the third-party subprocessors we use for each of our ' 'products:</p>\n' '<pre><code>- Google Cloud Platform\n' '- Google Workspace\n' '- Google Analtyics\n' '- Stripe\n' '- Cloudflare\n' '- Sentry\n' '</code></pre>\n' '<p>We may disclose your information at your direction if you ' 'integrate a third-party service into your use of our products. ' '</p>\n' '<p>No RecurveLabs human looks at your content except for limited ' 'purposes with your express permission, for example, if an error ' 'occurs that stops an automated process from working and requires ' 'manual intervention to fix. These are rare cases, and when they ' 'happen, we look for root cause solutions as much as possible to ' 'avoid them recurring. We may also access your data if required ' 'in order to respond to legal process (see "When required under ' 'applicable law" below).</p>\n' '<p><strong>To exclude you from seeing our ads.</strong> Where ' 'permissible by law and if you have a Recurve IP account, we may ' 'disclose a one-way hash of your email address with ad companies ' 'to exclude you from seeing our ads.</p>\n' '<p><strong>To help you troubleshoot or squash a software bug, ' 'with your permission.</strong> If at any point we need to access ' 'your content to help you with a support case, we will ask for ' 'your consent before proceeding.</p>\n' '<p><strong>To investigate, prevent, or take action regarding ' 'restricted uses</strong> Accessing a customer’s account when ' 'investigating potential abuse is a measure of last resort. We ' 'want to protect the privacy and safety of both our customers and ' 'the people reporting issues to us, and we do our best to balance ' 'those responsibilities throughout the process. If we discover ' 'you are using our products for a restricted purpose, we will ' 'take action as necessary, including notifying appropriate ' 'authorities where warranted.</p>\n' '<p><strong>Aggregated and de-identified data.</strong> We may ' 'aggregate and/or de-identify information collected through the ' 'services. We may use de-identified or aggregated data for any ' 'purpose, including marketing or analytics.</p>\n' '<p><strong>When required under applicable law.</strong> ' 'RecurveLabs is a U.S. company and all data infrastructure are ' 'located in the U.S.</p>\n' '<ul>\n' '<li>\n' '<p>Requests for user data. Our policy is to not respond to ' 'government requests for user data unless we are compelled by ' 'legal process or in limited circumstances in the event of an ' 'emergency request. However, if U.S. law enforcement authorities ' 'have the necessary warrant, criminal subpoena, or court order ' 'requiring us to disclose data, we must comply. Likewise, we will ' 'only respond to requests from government authorities outside the ' 'U.S. if compelled by the U.S. government through procedures ' 'outlined in a mutual legal assistance treaty or agreement. It is ' 'RecurveLabs’ policy to notify affected users before we disclose ' 'data unless we are legally prohibited from doing so, and except ' 'in some emergency cases.</p>\n' '</li>\n' '<li>\n' '<p>Preservation requests. Similarly, RecurveLabs’ policy is to ' 'comply with requests to preserve data only if compelled by the ' 'U.S. Federal Stored Communications Act, 18 U.S.C. Section ' '2703(f), or by a properly served U.S. subpoena for civil ' 'matters. We do not disclose preserved data unless required by ' 'law or compelled by a court order that we choose not to appeal. ' 'Furthermore, unless we receive a proper warrant, court order, or ' 'subpoena before the required preservation period expires, we ' 'will destroy any preserved copies of customer data at the end of ' 'the preservation period.</p>\n' '</li>\n' '<li>\n' '<p>If we are audited by a tax authority, we may be required to ' 'disclose billing-related information. If that happens, we will ' 'disclose only the minimum needed, such as billing addresses and ' 'tax exemption information.</p>\n' '</li>\n' '</ul>\n' '<p>Finally, if RecurveLabs is acquired by or merges with another ' 'company — we don’t plan on that, but if it happens — we’ll ' 'notify you well before any of your personal information is ' 'transferred or becomes subject to a different privacy ' 'policy.</p>\n' '<h2>Your rights with respect to your information</h2>\n' '<p>At RecurveLabs, we strive to apply the same data rights to ' 'all customers, regardless of their location. Some of these ' 'rights include:</p>\n' '<ul>\n' '<li><strong>Right to Know.</strong> You have the right to know ' 'what personal information is collected, used, shared or sold. We ' 'outline both the categories and specific bits of data we ' 'collect, as well as how they are used, in this privacy ' 'policy.</li>\n' '<li><strong>Right of Access.</strong> This includes your right ' 'to access the personal information we gather about you, and your ' 'right to obtain information about the sharing, storage, security ' 'and processing of that information.</li>\n' '<li><strong>Right to Correction.</strong> You have the right to ' 'request correction of your personal information.</li>\n' '<li><strong>Right to Erasure / “To Be Forgotten”.</strong> This ' 'is your right to request, subject to certain limitations under ' 'applicable law, that your personal information be erased from ' 'our possession and, by extension, from all of our service ' 'providers. Fulfillment of some data deletion requests may ' 'prevent you from using RecurveLabs services because our ' 'applications may then no longer work. In such cases, a data ' 'deletion request may result in closing your account.</li>\n' '<li><strong>Right to Complain.</strong> You have the right to ' 'make a complaint regarding our handling of your personal ' 'information with the appropriate supervisory authority.</li>\n' '<li><strong>Right to Restrict Processing.</strong> This is your ' 'right to request restriction of how and why your personal ' 'information is used or processed, including opting out of sale ' 'of your personal information. (Again: we never have and never ' 'will sell your personal data.)</li>\n' '<li><strong>Right to Object.</strong> You have the right, in ' 'certain situations, to object to how or why your personal ' 'information is processed.</li>\n' '<li>\n' '<p><strong>Right to Portability.</strong> You have the right to ' 'receive the personal information we have about you and the right ' 'to transmit it to another party. If you want to export data from ' 'your accounts please contact privacy@recurveip.com</p>\n' '</li>\n' '<li>\n' '<p><strong>Right to not Be Subject to Automated ' 'Decision-Making.</strong> You have the right to object to and ' 'prevent any decision that could have a legal or similarly ' 'significant effect on you from being made solely based on ' 'automated processes. This right is limited if the decision is ' 'necessary for performance of any contract between you and us, is ' 'allowed by applicable law, or is based on your explicit ' 'consent.</p>\n' '</li>\n' '<li><strong>Right to Non-Discrimination.</strong> We do not and ' 'will not charge you a different amount to use our products, ' 'offer you different discounts, or give you a lower level of ' 'customer service because you have exercised your data privacy ' 'rights. However, the exercise of certain rights may, by virtue ' 'of your exercising those rights, prevent you from using our ' 'Services.</li>\n' '</ul>\n' '<p>Many of these rights can be exercised by signing in and ' 'updating your account information. Please note that certain ' 'information may be exempt from such requests under applicable ' 'law. For example, we need to retain certain information in order ' 'to provide our services to you.</p>\n' '<p>In some cases, we also need to take reasonable steps to ' 'verify your identity before responding to a request, which may ' 'include, at a minimum, depending on the sensitivity of the ' 'information you are requesting and the type of request you are ' 'making, verifying your name and email address. If we are unable ' 'to verify you, we may be unable to respond to your requests. If ' 'you have questions about exercising these rights or need ' 'assistance, please contact us at <a ' 'href="mailto:privacy@RecurveLabs.com">privacy@RecurveLabs.com</a>.</p>\n' '<p>Depending on applicable law, you may have the right to appeal ' 'our decision to deny your request, if applicable. We will ' 'provide information about how to exercise that right in our ' 'response denying the request. You also have the right to lodge a ' 'complaint with a supervisory authority. If you are in the EU or ' 'UK, you can contact your data protection authority to file a ' 'complaint or learn more about local privacy laws.</p>\n' '<h2>How we secure your data</h2>\n' '<p>All data is encrypted via <a ' 'href="https://en.wikipedia.org/wiki/Transport_Layer_Security">SSL/TLS</a> ' 'when transmitted from our servers to your browser. The database ' 'backups are also encrypted. In addition, we go to great lengths ' 'to secure your data at rest.</p>\n' '<h2>What happens when you delete content in your product ' 'accounts</h2>\n' '<p>In many of our applications, we give you the option to trash ' 'content. Anything you trash in your product accounts while they ' 'are active will be kept in an accessible trash can for about 25 ' 'days. After that time, the trashed content cannot be accessed ' 'via the application and we are not able to retrieve it for you. ' 'The trashed content may remain on our active servers for another ' '30 days, and copies of the content may be held in backups of our ' 'application databases for up to another 30 days after that. ' 'Altogether, any content trashed in your product accounts should ' 'be purged from all of our systems and logs within 90 days.</p>\n' '<p>If you choose to cancel your account, your content will ' 'become immediately inaccessible and should be purged from our ' 'systems in full within 60 days. This applies both for cases when ' 'an account owner directly cancels and for auto-canceled ' 'accounts.</p>\n' '<h2>Data retention</h2>\n' '<p>We keep your information for the time necessary for the ' 'purposes for which it is processed. The length of time for which ' 'we retain information depends on the purposes for which we ' 'collected and use it and your choices, after which time we may ' 'delete and/or aggregate it. We may also retain and use this ' 'information as necessary to comply with our legal obligations, ' 'resolve disputes, and enforce our agreements. Through this ' 'policy, we have provided specific retention periods for certain ' 'types of information.</p>\n' '<h2>Location of site and data</h2>\n' '<p>Our products and other web properties are operated in the ' 'United States. If you are located in the European Union, UK, or ' 'elsewhere outside of the United States, <strong>please be aware ' 'that any information you provide to us will be transferred to ' 'and stored in the United States</strong>. By using our websites ' 'or Services and/or providing us with your personal information, ' 'you consent to this transfer.</p>\n' '<h2>When transferring personal data from the EU</h2>\n' '<p>The European Data Protection Board (EDPB) has issued guidance ' 'that personal data transferred out of the EU must be treated ' 'with the same level of protection that is granted under EU ' 'privacy law. UK law provides similar safeguards for UK user data ' 'that is transferred out of the UK. </p>\n' '<p>There are also a few ad hoc cases where EU personal data may ' 'be transferred to the U.S. in connection with RecurveLabs ' 'operations. Such transfers are only occasional and data is ' 'transferred under the <a ' 'href="https://gdpr-info.eu/art-49-gdpr/">Article 49(1)(b) ' 'derogation</a> under GDPR and the UK version of GDPR.</p>\n' '<h2>Changes and questions</h2>\n' '<p>We may update this policy as needed to comply with relevant ' 'regulations and reflect any new practices. Whenever we make a ' 'significant change to our policies, we will refresh the date at ' 'the top of this page and take any other appropriate steps to ' 'notify users.</p>\n' '<p>Have any questions, comments, or concerns about this privacy ' 'policy, your data, or your rights with respect to your ' 'information? Please get in touch by emailing us at <a ' 'href="mailto:privacy@recurveip.com">privacy@recurveip.com</a> ' 'and we’ll be happy to try to answer them!</p>', 'sentry_trace_meta': '<meta name="sentry-trace" ' 'content="bc90e9f7743741dc9be52183f65a41b5-9fa2cc6a8a4497c6-0"><meta ' 'name="baggage" ' 'content="sentry-trace_id=bc90e9f7743741dc9be52183f65a41b5,sentry-environment=production,sentry-public_key=54ce62ed00fab6b55c9bf2411994a94a,sentry-transaction=/privacy,sentry-sample_rate=0.1,sentry-sampled=false">'}
base.html
/app/theme/templates/base.html
Toggle context {'False': False, 'None': None, 'True': True} {'DEFAULT_MESSAGE_LEVELS': {'DEBUG': 10, 'ERROR': 40, 'INFO': 20, 'SUCCESS': 25, 'WARNING': 30}, 'csrf_token': <SimpleLazyObject: 'YQvbuYvuRGyLW33J5fW6RciOlOjGOs0zpADvg9KKbpVBcjm0EmQu7I1WE9Pf1aCg'>, 'debug': True, 'messages': <FallbackStorage: request=<WSGIRequest: GET '/privacy'>>, 'perms': PermWrapper(<SimpleLazyObject: <django.contrib.auth.models.AnonymousUser object at 0x7fb95a37ddd0>>), 'request': '<<request>>', 'sql_queries': <function debug.<locals>.<lambda> at 0x7fb95a44fd80>, 'user': <SimpleLazyObject: <django.contrib.auth.models.AnonymousUser object at 0x7fb95a37ddd0>>} {'markdown': '<h1>Privacy policy</h1>\n' '<p><em>Last updated: October 16, 2023</em></p>\n' '<p>The privacy of your data—and it is your data, not ours!—is a ' 'big deal to us. In this policy, we lay out: what data we collect ' 'and why; how your data is handled; and your rights with respect ' 'to your data. We promise we never sell your data: never have, ' 'never will.</p>\n' '<p>This policy is split into sections. For your convenience, ' 'links to each of those sections is as follows:</p>\n' '<ul>\n' '<li><a href="#privacy-policy">Privacy policy</a></li>\n' '<li><a href="#what-we-collect-and-why">What we collect and ' 'why</a></li>\n' '<li><a href="#when-we-access-or-disclose-your-information">When ' 'we access or disclose your information</a></li>\n' '<li><a href="#your-rights-with-respect-to-your-information">Your ' 'rights with respect to your information</a></li>\n' '<li><a href="#how-we-secure-your-data">How we secure your ' 'data</a></li>\n' '<li><a ' 'href="#what-happens-when-you-delete-content-in-your-product-accounts">What ' 'happens when you delete content in your product ' 'accounts</a></li>\n' '<li><a href="#data-retention">Data retention</a></li>\n' '<li><a href="#location-of-site-and-data">Location of site and ' 'data</a></li>\n' '<li><a href="#when-transferring-personal-data-from-the-eu">When ' 'transferring personal data from the EU</a></li>\n' '<li><a href="#changes-and-questions">Changes and ' 'questions</a></li>\n' '</ul>\n' '<p>This policy applies to all products built and maintained by ' 'RecurveLabs LLC.</p>\n' '<p>This policy applies to our handling of information about site ' 'visitors, prospective customers, and customers and authorized ' 'users (in relation to their procurement of the services and ' 'management of their relationship with RecurveLabs). We refer ' 'collectively to these categories of individuals as "you" ' 'throughout this policy.</p>\n' '<p>However, this policy does not cover information about a ' 'customer’s end users that RecurveLabs receives from a customer, ' 'or otherwise processes on a customer’s behalf, in connection ' 'with the services provided by RecurveLabs to the customer ' 'pursuant to an applicable services agreement (including the ' 'content of messages of customer end users ("End User ' 'Communications")). RecurveLabs processes End User Communications ' 'under the instructions of the relevant customer, which is the ' '"data controller" or "business" (or occupies a similar role as ' 'defined in applicable privacy laws), as described in the ' 'applicable services agreement between such customer and ' 'RecurveLabs. RecurveLabs’s obligations as a "data processor" or ' '"service provider" with respect to such information are defined ' 'in such services agreement and applicable data protection ' 'addendum and are not made part of this policy.</p>\n' '<p>If you are a customer’s end user and you have questions about ' 'how your information is collected and processed through the ' 'services, please contact the organization who has provided your ' 'information to us for more information.</p>\n' '<h2>What we collect and why</h2>\n' '<p>Our guiding principle is to collect only what we need. Here’s ' 'what that means in practice:</p>\n' '<h3>Identity and access</h3>\n' '<p>When you sign up for a RecurveLabs product, we ask for ' 'identifying information such as your name, email address, and ' 'maybe a company name. That’s so you can personalize your new ' 'account, and we can send you product updates and other essential ' 'information. We may also send you optional surveys from time to ' 'time to help us understand how you use our products and to make ' 'improvements. With your consent, we will send you our newsletter ' 'and other updates. We sometimes also give you the option to add ' 'a profile picture that displays in our products.</p>\n' '<p>We’ll never sell your personal information to third parties, ' 'and we won’t use your name or company in marketing statements ' 'without your permission either.</p>\n' '<h3>Billing information</h3>\n' '<p>If you sign up for a paid RecurveLabs product, you will be ' 'asked to provide your payment information and billing address. ' 'Credit card information is submitted directly to our payment ' 'processor and doesn’t hit RecurveLabs servers. We store a record ' 'of the payment transaction, including the last 4 digits of the ' 'credit card number, for purposes of account history, invoicing, ' 'and billing support. We store your billing address so we can ' 'charge you for service, calculate any sales tax due, send you ' 'invoices, and detect fraudulent credit card transactions. We ' 'occasionally use aggregate billing information to guide our ' 'marketing efforts.</p>\n' '<h3>Product interactions</h3>\n' '<p>We store on our servers the content that you upload or ' 'receive or maintain in your RecurveLabs product accounts. We ' 'keep this content as long as your account is active. If you ' 'delete your account, we’ll delete the content within 60 ' 'days.</p>\n' '<h3>General Geolocation data</h3>\n' '<p>For most of our products, we log the full IP address used to ' 'sign up a product account and retain that for use in mitigating ' 'future spammy signups. We also log all account access by full IP ' 'address for security and fraud prevention purposes, and we keep ' 'this login data for as long as your product account is ' 'active.</p>\n' '<h3>Website interactions</h3>\n' '<p>We collect information about your browsing activity for ' 'analytics and statistical purposes such as conversion rate ' 'testing and experimenting with new product designs. This ' 'includes, for example, your browser and operating system ' 'versions, your IP address, which web pages you visited and how ' 'long they took to load, and which website referred you to us. If ' 'you have an account and are signed in, these web analytics data ' 'are tied to your IP address and user account until your account ' 'is no longer active. The web analytics we use are described ' 'further in the Advertising and Cookies section.</p>\n' '<h3>Anti-bot assessments</h3>\n' '<p>We use <a ' 'href="https://en.wikipedia.org/wiki/CAPTCHA">CAPTCHA</a> across ' 'our applications to mitigate brute force logins and as a means ' 'of spam protection. We have a legitimate interest in protecting ' 'our apps and the broader Internet community from credential ' 'stuffing attacks and spam. When you log into your RecurveLabs ' 'accounts and when you fill in certain forms in Recurve IP, the ' 'CAPTCHA service evaluates various information (e.g., IP address, ' 'how long the visitor has been on the app, mouse movements) to ' 'try to detect if the activity is from an automated program ' 'instead of a human. The CAPTCHA service then provides ' 'RecurveLabs with the spam score results; we do not have access ' 'to the evaluated information.</p>\n' '<h3>Advertising and Cookies</h3>\n' '<p>RecurveLabs runs contextual ads on various third-party ' 'platforms such as Google, Reddit, and LinkedIn. Users who click ' 'on one of our ads will be sent to the Recurve IP marketing site. ' 'Where permissible under law, we may load an ad-company script on ' 'their browsers that sets a third-party cookie and sends ' 'information to the ad network to enable evaluation of the ' 'effectiveness of our ads, e.g., which ad they clicked and which ' 'keyword triggered the ad, and whether they performed certain ' 'actions such as clicking a button or submitting a form.</p>\n' '<p>We also use persistent first-party cookies and some ' 'third-party cookies to store certain preferences, make it easier ' 'for you to use our applications, and perform A/B testing as well ' 'as support some analytics.</p>\n' '<p>A cookie is a piece of text stored by your browser. It may ' 'help remember login information and site preferences. It might ' 'also collect information such as your browser type, operating ' 'system, web pages visited, duration of visit, content viewed, ' 'and other click-stream data. You can adjust cookie retention ' 'settings and accept or block individual cookies in your browser ' 'settings, although our apps won’t work and other aspects of our ' 'service may not function properly if you turn cookies off.</p>\n' '<h3>Voluntary correspondence</h3>\n' '<p>When you email RecurveLabs with a question or to ask for ' 'help, we keep that correspondence, including your email address, ' 'so that we have a history of past correspondence to reference if ' 'you reach out in the future.</p>\n' '<p>We also store information you may volunteer, for example, ' 'written responses to surveys. If you agree to a customer ' 'interview, we may ask for your permission to record the ' 'conversation for future reference or use. We will only do so ' 'with your express consent.</p>\n' '<h2>When we access or disclose your information</h2>\n' '<p><strong>To provide products or services you’ve ' 'requested</strong>. We use some third-party subprocessors to ' 'help run our applications and provide the Services to you. You ' 'can view the third-party subprocessors we use for each of our ' 'products:</p>\n' '<pre><code>- Google Cloud Platform\n' '- Google Workspace\n' '- Google Analtyics\n' '- Stripe\n' '- Cloudflare\n' '- Sentry\n' '</code></pre>\n' '<p>We may disclose your information at your direction if you ' 'integrate a third-party service into your use of our products. ' '</p>\n' '<p>No RecurveLabs human looks at your content except for limited ' 'purposes with your express permission, for example, if an error ' 'occurs that stops an automated process from working and requires ' 'manual intervention to fix. These are rare cases, and when they ' 'happen, we look for root cause solutions as much as possible to ' 'avoid them recurring. We may also access your data if required ' 'in order to respond to legal process (see "When required under ' 'applicable law" below).</p>\n' '<p><strong>To exclude you from seeing our ads.</strong> Where ' 'permissible by law and if you have a Recurve IP account, we may ' 'disclose a one-way hash of your email address with ad companies ' 'to exclude you from seeing our ads.</p>\n' '<p><strong>To help you troubleshoot or squash a software bug, ' 'with your permission.</strong> If at any point we need to access ' 'your content to help you with a support case, we will ask for ' 'your consent before proceeding.</p>\n' '<p><strong>To investigate, prevent, or take action regarding ' 'restricted uses</strong> Accessing a customer’s account when ' 'investigating potential abuse is a measure of last resort. We ' 'want to protect the privacy and safety of both our customers and ' 'the people reporting issues to us, and we do our best to balance ' 'those responsibilities throughout the process. If we discover ' 'you are using our products for a restricted purpose, we will ' 'take action as necessary, including notifying appropriate ' 'authorities where warranted.</p>\n' '<p><strong>Aggregated and de-identified data.</strong> We may ' 'aggregate and/or de-identify information collected through the ' 'services. We may use de-identified or aggregated data for any ' 'purpose, including marketing or analytics.</p>\n' '<p><strong>When required under applicable law.</strong> ' 'RecurveLabs is a U.S. company and all data infrastructure are ' 'located in the U.S.</p>\n' '<ul>\n' '<li>\n' '<p>Requests for user data. Our policy is to not respond to ' 'government requests for user data unless we are compelled by ' 'legal process or in limited circumstances in the event of an ' 'emergency request. However, if U.S. law enforcement authorities ' 'have the necessary warrant, criminal subpoena, or court order ' 'requiring us to disclose data, we must comply. Likewise, we will ' 'only respond to requests from government authorities outside the ' 'U.S. if compelled by the U.S. government through procedures ' 'outlined in a mutual legal assistance treaty or agreement. It is ' 'RecurveLabs’ policy to notify affected users before we disclose ' 'data unless we are legally prohibited from doing so, and except ' 'in some emergency cases.</p>\n' '</li>\n' '<li>\n' '<p>Preservation requests. Similarly, RecurveLabs’ policy is to ' 'comply with requests to preserve data only if compelled by the ' 'U.S. Federal Stored Communications Act, 18 U.S.C. Section ' '2703(f), or by a properly served U.S. subpoena for civil ' 'matters. We do not disclose preserved data unless required by ' 'law or compelled by a court order that we choose not to appeal. ' 'Furthermore, unless we receive a proper warrant, court order, or ' 'subpoena before the required preservation period expires, we ' 'will destroy any preserved copies of customer data at the end of ' 'the preservation period.</p>\n' '</li>\n' '<li>\n' '<p>If we are audited by a tax authority, we may be required to ' 'disclose billing-related information. If that happens, we will ' 'disclose only the minimum needed, such as billing addresses and ' 'tax exemption information.</p>\n' '</li>\n' '</ul>\n' '<p>Finally, if RecurveLabs is acquired by or merges with another ' 'company — we don’t plan on that, but if it happens — we’ll ' 'notify you well before any of your personal information is ' 'transferred or becomes subject to a different privacy ' 'policy.</p>\n' '<h2>Your rights with respect to your information</h2>\n' '<p>At RecurveLabs, we strive to apply the same data rights to ' 'all customers, regardless of their location. Some of these ' 'rights include:</p>\n' '<ul>\n' '<li><strong>Right to Know.</strong> You have the right to know ' 'what personal information is collected, used, shared or sold. We ' 'outline both the categories and specific bits of data we ' 'collect, as well as how they are used, in this privacy ' 'policy.</li>\n' '<li><strong>Right of Access.</strong> This includes your right ' 'to access the personal information we gather about you, and your ' 'right to obtain information about the sharing, storage, security ' 'and processing of that information.</li>\n' '<li><strong>Right to Correction.</strong> You have the right to ' 'request correction of your personal information.</li>\n' '<li><strong>Right to Erasure / “To Be Forgotten”.</strong> This ' 'is your right to request, subject to certain limitations under ' 'applicable law, that your personal information be erased from ' 'our possession and, by extension, from all of our service ' 'providers. Fulfillment of some data deletion requests may ' 'prevent you from using RecurveLabs services because our ' 'applications may then no longer work. In such cases, a data ' 'deletion request may result in closing your account.</li>\n' '<li><strong>Right to Complain.</strong> You have the right to ' 'make a complaint regarding our handling of your personal ' 'information with the appropriate supervisory authority.</li>\n' '<li><strong>Right to Restrict Processing.</strong> This is your ' 'right to request restriction of how and why your personal ' 'information is used or processed, including opting out of sale ' 'of your personal information. (Again: we never have and never ' 'will sell your personal data.)</li>\n' '<li><strong>Right to Object.</strong> You have the right, in ' 'certain situations, to object to how or why your personal ' 'information is processed.</li>\n' '<li>\n' '<p><strong>Right to Portability.</strong> You have the right to ' 'receive the personal information we have about you and the right ' 'to transmit it to another party. If you want to export data from ' 'your accounts please contact privacy@recurveip.com</p>\n' '</li>\n' '<li>\n' '<p><strong>Right to not Be Subject to Automated ' 'Decision-Making.</strong> You have the right to object to and ' 'prevent any decision that could have a legal or similarly ' 'significant effect on you from being made solely based on ' 'automated processes. This right is limited if the decision is ' 'necessary for performance of any contract between you and us, is ' 'allowed by applicable law, or is based on your explicit ' 'consent.</p>\n' '</li>\n' '<li><strong>Right to Non-Discrimination.</strong> We do not and ' 'will not charge you a different amount to use our products, ' 'offer you different discounts, or give you a lower level of ' 'customer service because you have exercised your data privacy ' 'rights. However, the exercise of certain rights may, by virtue ' 'of your exercising those rights, prevent you from using our ' 'Services.</li>\n' '</ul>\n' '<p>Many of these rights can be exercised by signing in and ' 'updating your account information. Please note that certain ' 'information may be exempt from such requests under applicable ' 'law. For example, we need to retain certain information in order ' 'to provide our services to you.</p>\n' '<p>In some cases, we also need to take reasonable steps to ' 'verify your identity before responding to a request, which may ' 'include, at a minimum, depending on the sensitivity of the ' 'information you are requesting and the type of request you are ' 'making, verifying your name and email address. If we are unable ' 'to verify you, we may be unable to respond to your requests. If ' 'you have questions about exercising these rights or need ' 'assistance, please contact us at <a ' 'href="mailto:privacy@RecurveLabs.com">privacy@RecurveLabs.com</a>.</p>\n' '<p>Depending on applicable law, you may have the right to appeal ' 'our decision to deny your request, if applicable. We will ' 'provide information about how to exercise that right in our ' 'response denying the request. You also have the right to lodge a ' 'complaint with a supervisory authority. If you are in the EU or ' 'UK, you can contact your data protection authority to file a ' 'complaint or learn more about local privacy laws.</p>\n' '<h2>How we secure your data</h2>\n' '<p>All data is encrypted via <a ' 'href="https://en.wikipedia.org/wiki/Transport_Layer_Security">SSL/TLS</a> ' 'when transmitted from our servers to your browser. The database ' 'backups are also encrypted. In addition, we go to great lengths ' 'to secure your data at rest.</p>\n' '<h2>What happens when you delete content in your product ' 'accounts</h2>\n' '<p>In many of our applications, we give you the option to trash ' 'content. Anything you trash in your product accounts while they ' 'are active will be kept in an accessible trash can for about 25 ' 'days. After that time, the trashed content cannot be accessed ' 'via the application and we are not able to retrieve it for you. ' 'The trashed content may remain on our active servers for another ' '30 days, and copies of the content may be held in backups of our ' 'application databases for up to another 30 days after that. ' 'Altogether, any content trashed in your product accounts should ' 'be purged from all of our systems and logs within 90 days.</p>\n' '<p>If you choose to cancel your account, your content will ' 'become immediately inaccessible and should be purged from our ' 'systems in full within 60 days. This applies both for cases when ' 'an account owner directly cancels and for auto-canceled ' 'accounts.</p>\n' '<h2>Data retention</h2>\n' '<p>We keep your information for the time necessary for the ' 'purposes for which it is processed. The length of time for which ' 'we retain information depends on the purposes for which we ' 'collected and use it and your choices, after which time we may ' 'delete and/or aggregate it. We may also retain and use this ' 'information as necessary to comply with our legal obligations, ' 'resolve disputes, and enforce our agreements. Through this ' 'policy, we have provided specific retention periods for certain ' 'types of information.</p>\n' '<h2>Location of site and data</h2>\n' '<p>Our products and other web properties are operated in the ' 'United States. If you are located in the European Union, UK, or ' 'elsewhere outside of the United States, <strong>please be aware ' 'that any information you provide to us will be transferred to ' 'and stored in the United States</strong>. By using our websites ' 'or Services and/or providing us with your personal information, ' 'you consent to this transfer.</p>\n' '<h2>When transferring personal data from the EU</h2>\n' '<p>The European Data Protection Board (EDPB) has issued guidance ' 'that personal data transferred out of the EU must be treated ' 'with the same level of protection that is granted under EU ' 'privacy law. UK law provides similar safeguards for UK user data ' 'that is transferred out of the UK. </p>\n' '<p>There are also a few ad hoc cases where EU personal data may ' 'be transferred to the U.S. in connection with RecurveLabs ' 'operations. Such transfers are only occasional and data is ' 'transferred under the <a ' 'href="https://gdpr-info.eu/art-49-gdpr/">Article 49(1)(b) ' 'derogation</a> under GDPR and the UK version of GDPR.</p>\n' '<h2>Changes and questions</h2>\n' '<p>We may update this policy as needed to comply with relevant ' 'regulations and reflect any new practices. Whenever we make a ' 'significant change to our policies, we will refresh the date at ' 'the top of this page and take any other appropriate steps to ' 'notify users.</p>\n' '<p>Have any questions, comments, or concerns about this privacy ' 'policy, your data, or your rights with respect to your ' 'information? Please get in touch by emailing us at <a ' 'href="mailto:privacy@recurveip.com">privacy@recurveip.com</a> ' 'and we’ll be happy to try to answer them!</p>', 'sentry_trace_meta': '<meta name="sentry-trace" ' 'content="bc90e9f7743741dc9be52183f65a41b5-9fa2cc6a8a4497c6-0"><meta ' 'name="baggage" ' 'content="sentry-trace_id=bc90e9f7743741dc9be52183f65a41b5,sentry-environment=production,sentry-public_key=54ce62ed00fab6b55c9bf2411994a94a,sentry-transaction=/privacy,sentry-sample_rate=0.1,sentry-sampled=false">'}
tailwind/tags/css.html
/usr/local/lib/python3.11/site-packages/tailwind/templates/tailwind/tags/css.html
Toggle context {'False': False, 'None': None, 'True': True} {'csrf_token': <SimpleLazyObject: 'YQvbuYvuRGyLW33J5fW6RciOlOjGOs0zpADvg9KKbpVBcjm0EmQu7I1WE9Pf1aCg'>, 'dev_mode': False, 'is_static_path': True, 'tailwind_css_path': 'css/dist/styles.css', 'v': 1790536159}

Context processors

django.template.context_processors.csrf
Toggle context {'csrf_token': <SimpleLazyObject: 'YQvbuYvuRGyLW33J5fW6RciOlOjGOs0zpADvg9KKbpVBcjm0EmQu7I1WE9Pf1aCg'>}
django.template.context_processors.debug
Toggle context {'debug': True, 'sql_queries': <function debug.<locals>.<lambda> at 0x7fb95a44fd80>}
django.template.context_processors.request
Toggle context {'request': <WSGIRequest: GET '/privacy'>}
django.contrib.auth.context_processors.auth
Toggle context {'user': <SimpleLazyObject: <django.contrib.auth.models.AnonymousUser object at 0x7fb95a37ddd0>>, 'perms': PermWrapper(<SimpleLazyObject: <django.contrib.auth.models.AnonymousUser object at 0x7fb95a37ddd0>>)}
django.contrib.messages.context_processors.messages
Toggle context {'messages': <FallbackStorage: request=<WSGIRequest: GET '/privacy'>>, 'DEFAULT_MESSAGE_LEVELS': {'DEBUG': 10, 'INFO': 20, 'SUCCESS': 25, 'WARNING': 30, 'ERROR': 40}}

Cache calls from 2 backends

Summary

Total calls Total time Cache hits Cache misses
0 0 ms 0 0

Commands

add get set get_or_set touch delete clear get_many set_many delete_many has_key incr decr incr_version decr_version
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Signals

Signal Receivers
class_prepared
connection_created
got_request_exception _got_request_exception
m2m_changed
post_delete
post_init
post_migrate create_permissions, create_contenttypes
post_save billing
pre_delete
pre_init
pre_migrate inject_rename_contenttypes_operations
pre_save
request_finished close_old_connections, close_caches, reset_urlconf
request_started reset_queries, close_old_connections
setting_changed reset_cache, clear_cache_handlers, update_installed_apps, update_connections_time_zone, clear_routers_cache, reset_template_engines, storages_changed, clear_serializers_cache, language_changed, localize_settings_changed, file_storage_changed, complex_setting_changed, root_urlconf_changed, static_storage_changed, static_finders_changed, auth_password_validators_changed, user_model_swapped, update_toolbar_config, reset_hashers, update_level_tags, clear_caches, StaticFilesStorage._clear_cached_properties, FileSystemStorage._clear_cached_properties, FileSystemStorage._clear_cached_properties, FileSystemStorage._clear_cached_properties, FileSystemStorage._clear_cached_properties, FileSystemStorage._clear_cached_properties