Add contact, privacy, and terms pages with localization support

- Implemented contact page with form submission functionality and email integration.
- Created privacy and terms pages with structured content and localization.
- Updated English and French localization files to include new strings for contact, privacy, and terms.
- Enhanced About page with detailed sections on mission, technology, security, and tools offered.
This commit is contained in:
Your Name
2026-03-09 13:24:50 +02:00
parent b9900106b2
commit ce5c85ec7d
10 changed files with 672 additions and 118 deletions

View File

@@ -3,58 +3,55 @@ import { Helmet } from 'react-helmet-async';
import { FILE_RETENTION_MINUTES } from '@/config/toolLimits';
const LAST_UPDATED = '2026-03-06';
const CONTACT_EMAIL = 'support@saas-pdf.com';
export default function PrivacyPage() {
const { t } = useTranslation();
const fileItems = t('pages.privacy.fileHandlingItems', { minutes: FILE_RETENTION_MINUTES, returnObjects: true }) as string[];
const thirdPartyItems = t('pages.privacy.thirdPartyItems', { returnObjects: true }) as string[];
return (
<>
<Helmet>
<title>{t('common.privacy')} {t('common.appName')}</title>
<meta name="description" content="Privacy policy for our online tools." />
<title>{t('pages.privacy.title')} {t('common.appName')}</title>
<meta name="description" content={t('pages.privacy.metaDescription')} />
<link rel="canonical" href={`${window.location.origin}/privacy`} />
</Helmet>
<div className="prose mx-auto max-w-2xl dark:prose-invert">
<h1>{t('common.privacy')}</h1>
<p><em>Last updated: {LAST_UPDATED}</em></p>
<h1>{t('pages.privacy.title')}</h1>
<p><em>{t('pages.privacy.lastUpdated', { date: LAST_UPDATED })}</em></p>
<h2>1. Data Collection</h2>
<h2>{t('pages.privacy.dataCollectionTitle')}</h2>
<p>{t('pages.privacy.dataCollectionText')}</p>
<h2>{t('pages.privacy.fileHandlingTitle')}</h2>
{Array.isArray(fileItems) && (
<ul>
{fileItems.map((item, idx) => <li key={idx}>{item}</li>)}
</ul>
)}
<h2>{t('pages.privacy.cookiesTitle')}</h2>
<p>{t('pages.privacy.cookiesText')}</p>
<h2>{t('pages.privacy.thirdPartyTitle')}</h2>
{Array.isArray(thirdPartyItems) && (
<ul>
{thirdPartyItems.map((item, idx) => <li key={idx}>{item}</li>)}
</ul>
)}
<h2>{t('pages.privacy.securityTitle')}</h2>
<p>{t('pages.privacy.securityText')}</p>
<h2>{t('pages.privacy.rightsTitle')}</h2>
<p>{t('pages.privacy.rightsText', { minutes: FILE_RETENTION_MINUTES })}</p>
<h2>{t('pages.privacy.contactTitle')}</h2>
<p>
We only collect files you intentionally upload for processing. We do not
require registration, and we do not store personal information.
</p>
<h2>2. File Processing & Storage</h2>
<ul>
<li>Uploaded files are processed on our secure servers.</li>
<li>All uploaded and output files are <strong>automatically deleted within {FILE_RETENTION_MINUTES} minutes</strong>.</li>
<li>Files are stored in encrypted cloud storage during processing.</li>
<li>We do not access, read, or share the content of your files.</li>
</ul>
<h2>3. Cookies & Analytics</h2>
<p>
We use essential cookies to remember your language preference. We may use
Google Analytics and Google AdSense, which may place their own cookies.
You can manage cookie preferences in your browser settings.
</p>
<h2>4. Third-Party Services</h2>
<ul>
<li><strong>Google AdSense</strong> for displaying advertisements.</li>
<li><strong>AWS S3</strong> for temporary file storage.</li>
</ul>
<h2>5. Security</h2>
<p>
We employ industry-standard security measures including HTTPS encryption,
file validation, rate limiting, and automatic file cleanup.
</p>
<h2>6. Contact</h2>
<p>
Questions about this policy? Contact us at{' '}
<a href="mailto:support@example.com">support@example.com</a>.
{t('pages.privacy.contactText')}{' '}
<a href={`mailto:${CONTACT_EMAIL}`}>{CONTACT_EMAIL}</a>.
</p>
</div>
</>