chore: update project branding from SaaS-PDF to Dociva

- Updated robots.txt to reflect new site name and sitemap URL.
- Modified sitemap.xml to change all URLs from saas-pdf.com to dociva.io.
- Changed storage key for site assistant in SiteAssistant.tsx.
- Updated SEOHead.tsx to change site name in meta tags.
- Translated app name and related text in Arabic, English, and French JSON files.
- Updated contact email in ContactPage.tsx, PrivacyPage.tsx, and TermsPage.tsx.
- Changed internal admin page title to reflect new branding.
- Updated pricing page meta description to reference Dociva.
- Adjusted Nginx configuration for new domain.
- Modified deployment script to reflect new branding.
- Updated sitemap generation script to use new domain.
This commit is contained in:
Your Name
2026-03-16 21:51:12 +02:00
parent 957d37838c
commit f933ffa8a0
40 changed files with 213 additions and 167 deletions

View File

@@ -5,7 +5,7 @@ SECRET_KEY=change-me-in-production
INTERNAL_ADMIN_EMAILS=admin@example.com INTERNAL_ADMIN_EMAILS=admin@example.com
# Site Domain (used in sitemap, robots.txt, emails) # Site Domain (used in sitemap, robots.txt, emails)
SITE_DOMAIN=https://saas-pdf.com SITE_DOMAIN=https://dociva.io
# Redis # Redis
REDIS_URL=redis://redis:6379/0 REDIS_URL=redis://redis:6379/0
@@ -22,7 +22,7 @@ OPENROUTER_BASE_URL=https://openrouter.ai/api/v1/chat/completions
# AWS S3 # AWS S3
AWS_ACCESS_KEY_ID=your-access-key AWS_ACCESS_KEY_ID=your-access-key
AWS_SECRET_ACCESS_KEY=your-secret-key AWS_SECRET_ACCESS_KEY=your-secret-key
AWS_S3_BUCKET=saas-pdf-temp-files AWS_S3_BUCKET=dociva-temp-files
AWS_S3_REGION=eu-west-1 AWS_S3_REGION=eu-west-1
# File Processing # File Processing
@@ -30,7 +30,7 @@ MAX_CONTENT_LENGTH_MB=50
UPLOAD_FOLDER=/tmp/uploads UPLOAD_FOLDER=/tmp/uploads
OUTPUT_FOLDER=/tmp/outputs OUTPUT_FOLDER=/tmp/outputs
FILE_EXPIRY_SECONDS=1800 FILE_EXPIRY_SECONDS=1800
DATABASE_PATH=/app/data/saas_pdf.db DATABASE_PATH=/app/data/dociva.db
# CORS # CORS
CORS_ORIGINS=http://localhost:5173,http://localhost:3000 CORS_ORIGINS=http://localhost:5173,http://localhost:3000
@@ -49,7 +49,7 @@ SENTRY_ENVIRONMENT=development
DATABASE_URL= DATABASE_URL=
# Frontend # Frontend
VITE_SITE_DOMAIN=https://saas-pdf.com VITE_SITE_DOMAIN=https://dociva.io
VITE_SENTRY_DSN= VITE_SENTRY_DSN=
# Frontend Analytics / Ads (Vite) # Frontend Analytics / Ads (Vite)

4
.gitignore vendored
View File

@@ -53,3 +53,7 @@ logs/
htmlcov/ htmlcov/
.coverage .coverage
coverage/ coverage/
# Celery
celerybeat-schedule
backend/celerybeat-schedule

View File

@@ -1,4 +1,4 @@
# Contributing to SaaS-PDF # Contributing to Dociva
## Safety Rules ## Safety Rules

View File

@@ -1,6 +1,8 @@
# SaaS-PDF — Free Online Tools Platform # Dociva — Free Online Tools Platform
A free SaaS platform offering PDF, image, video, and text processing tools. Built with **Python Flask** (backend) and **React + Vite** (frontend), powered by **Celery + Redis** for async processing, and deployed on **AWS**. A free SaaS platform offering PDF, image, video, and text processing tools. Built with **Python Flask** (backend) and **React + Vite** (frontend), powered by **Celery + Redis** for async processing.
**Live at:** [https://dociva.io](https://dociva.io)
## 🛠 Tools (Current) ## 🛠 Tools (Current)
@@ -65,7 +67,7 @@ docker-compose up --build
- Session-backed authentication via `/api/auth/*` - Session-backed authentication via `/api/auth/*`
- Free account creation with email + password - Free account creation with email + password
- Recent generated-file history via `/api/history` - Recent generated-file history via `/api/history`
- Persistent SQLite storage at `DATABASE_PATH` (defaults to `backend/data/saas_pdf.db` locally) - Persistent SQLite storage at `DATABASE_PATH` (defaults to `backend/data/dociva.db` locally)
## 📈 Analytics & Ads Env ## 📈 Analytics & Ads Env
@@ -80,7 +82,7 @@ docker-compose up --build
## 📁 Project Structure ## 📁 Project Structure
``` ```
SaaS-PDF/ Dociva/
├── backend/ # Flask API + Celery Workers ├── backend/ # Flask API + Celery Workers
├── frontend/ # React + Vite + TypeScript ├── frontend/ # React + Vite + TypeScript
├── nginx/ # Reverse proxy configuration ├── nginx/ # Reverse proxy configuration

View File

@@ -9,6 +9,6 @@ def health_check():
"""Simple health check — returns 200 if the service is running.""" """Simple health check — returns 200 if the service is running."""
return jsonify({ return jsonify({
"status": "healthy", "status": "healthy",
"service": "SaaS-PDF API", "service": "Dociva API",
"version": "1.0.0", "version": "1.0.0",
}) })

View File

@@ -63,11 +63,11 @@ def save_message(name: str, email: str, category: str, subject: str, message: st
conn.close() conn.close()
# Send notification email to admin # Send notification email to admin
admin_email = current_app.config.get("SMTP_FROM", "noreply@saas-pdf.com") admin_email = current_app.config.get("SMTP_FROM", "noreply@dociva.io")
try: try:
send_email( send_email(
to=admin_email, to=admin_email,
subject=f"[SaaS-PDF Contact] [{category}] {subject}", subject=f"[Dociva Contact] [{category}] {subject}",
html_body=f""" html_body=f"""
<h2>New Contact Message</h2> <h2>New Contact Message</h2>
<p><strong>From:</strong> {name} &lt;{email}&gt;</p> <p><strong>From:</strong> {name} &lt;{email}&gt;</p>

View File

@@ -16,7 +16,7 @@ def _get_smtp_config() -> dict:
"port": current_app.config.get("SMTP_PORT", 587), "port": current_app.config.get("SMTP_PORT", 587),
"user": current_app.config.get("SMTP_USER", ""), "user": current_app.config.get("SMTP_USER", ""),
"password": current_app.config.get("SMTP_PASSWORD", ""), "password": current_app.config.get("SMTP_PASSWORD", ""),
"from_addr": current_app.config.get("SMTP_FROM", "noreply@saas-pdf.com"), "from_addr": current_app.config.get("SMTP_FROM", "noreply@dociva.io"),
"use_tls": current_app.config.get("SMTP_USE_TLS", True), "use_tls": current_app.config.get("SMTP_USE_TLS", True),
} }
@@ -62,11 +62,11 @@ def send_password_reset_email(to: str, token: str) -> bool:
html = f""" html = f"""
<div style="font-family: sans-serif; max-width: 480px; margin: auto;"> <div style="font-family: sans-serif; max-width: 480px; margin: auto;">
<h2>Password Reset</h2> <h2>Password Reset</h2>
<p>You requested a password reset for your SaaS-PDF account.</p> <p>You requested a password reset for your Dociva account.</p>
<p><a href="{reset_link}" style="display:inline-block;padding:12px 24px;background:#4f46e5;color:#fff;border-radius:8px;text-decoration:none;"> <p><a href="{reset_link}" style="display:inline-block;padding:12px 24px;background:#4f46e5;color:#fff;border-radius:8px;text-decoration:none;">
Reset Password Reset Password
</a></p> </a></p>
<p style="color:#666;font-size:14px;">This link expires in 1 hour. If you didn't request this, you can safely ignore this email.</p> <p style="color:#666;font-size:14px;">This link expires in 1 hour. If you didn't request this, you can safely ignore this email.</p>
</div> </div>
""" """
return send_email(to, "Reset your SaaS-PDF password", html) return send_email(to, "Reset your Dociva password", html)

View File

@@ -52,7 +52,7 @@ TOOL_CATALOG = [
{"slug": "text-cleaner", "label": "Text Cleaner", "summary": "clean up text spacing and formatting"}, {"slug": "text-cleaner", "label": "Text Cleaner", "summary": "clean up text spacing and formatting"},
] ]
SYSTEM_PROMPT = """You are the SaaS-PDF site assistant. SYSTEM_PROMPT = """You are the Dociva site assistant.
You help users choose the right tool, understand how to use the current tool, and explain site capabilities. You help users choose the right tool, understand how to use the current tool, and explain site capabilities.
Rules: Rules:
- Reply in the same language as the user. - Reply in the same language as the user.

Binary file not shown.

View File

@@ -29,7 +29,7 @@ class BaseConfig:
OUTPUT_FOLDER = os.getenv("OUTPUT_FOLDER", "/tmp/outputs") OUTPUT_FOLDER = os.getenv("OUTPUT_FOLDER", "/tmp/outputs")
FILE_EXPIRY_SECONDS = int(os.getenv("FILE_EXPIRY_SECONDS", 1800)) FILE_EXPIRY_SECONDS = int(os.getenv("FILE_EXPIRY_SECONDS", 1800))
DATABASE_PATH = os.getenv( DATABASE_PATH = os.getenv(
"DATABASE_PATH", os.path.join(BASE_DIR, "data", "saas_pdf.db") "DATABASE_PATH", os.path.join(BASE_DIR, "data", "dociva.db")
) )
PERMANENT_SESSION_LIFETIME = timedelta(days=30) PERMANENT_SESSION_LIFETIME = timedelta(days=30)
SESSION_COOKIE_HTTPONLY = True SESSION_COOKIE_HTTPONLY = True
@@ -94,7 +94,7 @@ class BaseConfig:
# AWS S3 # AWS S3
AWS_ACCESS_KEY_ID = os.getenv("AWS_ACCESS_KEY_ID") AWS_ACCESS_KEY_ID = os.getenv("AWS_ACCESS_KEY_ID")
AWS_SECRET_ACCESS_KEY = os.getenv("AWS_SECRET_ACCESS_KEY") AWS_SECRET_ACCESS_KEY = os.getenv("AWS_SECRET_ACCESS_KEY")
AWS_S3_BUCKET = os.getenv("AWS_S3_BUCKET", "saas-pdf-temp-files") AWS_S3_BUCKET = os.getenv("AWS_S3_BUCKET", "dociva-temp-files")
AWS_S3_REGION = os.getenv("AWS_S3_REGION", "eu-west-1") AWS_S3_REGION = os.getenv("AWS_S3_REGION", "eu-west-1")
# CORS # CORS
@@ -116,7 +116,7 @@ class BaseConfig:
SMTP_PORT = int(os.getenv("SMTP_PORT", 587)) SMTP_PORT = int(os.getenv("SMTP_PORT", 587))
SMTP_USER = os.getenv("SMTP_USER", "") SMTP_USER = os.getenv("SMTP_USER", "")
SMTP_PASSWORD = os.getenv("SMTP_PASSWORD", "") SMTP_PASSWORD = os.getenv("SMTP_PASSWORD", "")
SMTP_FROM = os.getenv("SMTP_FROM", "noreply@saas-pdf.com") SMTP_FROM = os.getenv("SMTP_FROM", "noreply@dociva.io")
SMTP_USE_TLS = os.getenv("SMTP_USE_TLS", "true").lower() == "true" SMTP_USE_TLS = os.getenv("SMTP_USE_TLS", "true").lower() == "true"
FRONTEND_URL = os.getenv("FRONTEND_URL", "http://localhost:5173") FRONTEND_URL = os.getenv("FRONTEND_URL", "http://localhost:5173")
@@ -131,7 +131,7 @@ class BaseConfig:
SENTRY_ENVIRONMENT = os.getenv("SENTRY_ENVIRONMENT", "development") SENTRY_ENVIRONMENT = os.getenv("SENTRY_ENVIRONMENT", "development")
# Site domain # Site domain
SITE_DOMAIN = os.getenv("SITE_DOMAIN", "https://saas-pdf.com") SITE_DOMAIN = os.getenv("SITE_DOMAIN", "https://dociva.io")
# PostgreSQL (production) — set DATABASE_URL to use PG instead of SQLite # PostgreSQL (production) — set DATABASE_URL to use PG instead of SQLite
DATABASE_URL = os.getenv("DATABASE_URL", "") DATABASE_URL = os.getenv("DATABASE_URL", "")
@@ -153,6 +153,7 @@ class ProductionConfig(BaseConfig):
DEBUG = False DEBUG = False
TESTING = False TESTING = False
SESSION_COOKIE_SECURE = True SESSION_COOKIE_SECURE = True
SESSION_COOKIE_SAMESITE = "Lax"
# Stricter rate limits in production # Stricter rate limits in production
RATELIMIT_DEFAULT = "60/hour" RATELIMIT_DEFAULT = "60/hour"
@@ -163,7 +164,7 @@ class TestingConfig(BaseConfig):
TESTING = True TESTING = True
UPLOAD_FOLDER = "/tmp/test_uploads" UPLOAD_FOLDER = "/tmp/test_uploads"
OUTPUT_FOLDER = "/tmp/test_outputs" OUTPUT_FOLDER = "/tmp/test_outputs"
DATABASE_PATH = "/tmp/test_saas_pdf.db" DATABASE_PATH = "/tmp/test_dociva.db"
FEATURE_EDITOR = False FEATURE_EDITOR = False
FEATURE_OCR = False FEATURE_OCR = False
FEATURE_REMOVEBG = False FEATURE_REMOVEBG = False

View File

@@ -17,8 +17,8 @@ from app.services.stripe_service import init_stripe_db
def app(): def app():
"""Create application for testing.""" """Create application for testing."""
os.environ['FLASK_ENV'] = 'testing' os.environ['FLASK_ENV'] = 'testing'
test_root = tempfile.mkdtemp(prefix='saas-pdf-tests-') test_root = tempfile.mkdtemp(prefix='dociva-tests-')
db_path = os.path.join(test_root, 'test_saas_pdf.db') db_path = os.path.join(test_root, 'test_dociva.db')
upload_folder = os.path.join(test_root, 'uploads') upload_folder = os.path.join(test_root, 'uploads')
output_folder = os.path.join(test_root, 'outputs') output_folder = os.path.join(test_root, 'outputs')
os.environ['DATABASE_PATH'] = db_path os.environ['DATABASE_PATH'] = db_path

View File

@@ -1,4 +1,4 @@
# خطة رفع SaaS-PDF إلى مستوى المنافسة # خطة رفع Dociva إلى مستوى المنافسة
## Summary ## Summary
- اعتماد مسار نمو واضح: `B2C SEO-first` أولاً، ثم `Freemium monetization`، ثم `B2B API expansion`. - اعتماد مسار نمو واضح: `B2C SEO-first` أولاً، ثم `Freemium monetization`، ثم `B2B API expansion`.

View File

@@ -1,4 +1,4 @@
# SaaS-PDF — SEO & Growth Strategy # Dociva — SEO & Growth Strategy
> Roadmap to **500 000 monthly visits** for a multilingual (EN / AR / FR) free-tool SaaS. > Roadmap to **500 000 monthly visits** for a multilingual (EN / AR / FR) free-tool SaaS.
@@ -37,7 +37,7 @@ VITE_GA_MEASUREMENT_ID=G-XXXXXXXXXX
### Plausible (Privacy-Friendly Alternative) ### Plausible (Privacy-Friendly Alternative)
```env ```env
VITE_PLAUSIBLE_DOMAIN=saas-pdf.com VITE_PLAUSIBLE_DOMAIN=Dociva.com
VITE_PLAUSIBLE_SRC=https://plausible.io/js/script.js # or self-hosted URL VITE_PLAUSIBLE_SRC=https://plausible.io/js/script.js # or self-hosted URL
``` ```
@@ -127,7 +127,7 @@ All text is i18n-driven from `seo.{toolKey}.*` keys in EN/AR/FR.
- "كيفية دمج ملفات PDF" (Arabic equivalent) - "كيفية دمج ملفات PDF" (Arabic equivalent)
- "comment fusionner des fichiers PDF" (French equivalent) - "comment fusionner des fichiers PDF" (French equivalent)
- [ ] Each blog post links to the relevant tool page (internal linking) - [ ] Each blog post links to the relevant tool page (internal linking)
- [ ] Create comparison pages: "SaaS-PDF vs iLovePDF vs SmallPDF" - [ ] Create comparison pages: "Dociva vs iLovePDF vs SmallPDF"
**Keyword Research Strategy:** **Keyword Research Strategy:**
- Target 200500 keywords across three tiers: - Target 200500 keywords across three tiers:
@@ -206,7 +206,7 @@ All text is i18n-driven from `seo.{toolKey}.*` keys in EN/AR/FR.
| PDF24 | ~40M | Desktop app + web tools | Lightweight, faster load, mobile-first | | PDF24 | ~40M | Desktop app + web tools | Lightweight, faster load, mobile-first |
| Sejda | ~10M | Advanced editing features | More tools, trilingual content | | Sejda | ~10M | Advanced editing features | More tools, trilingual content |
**Key differentiators for SaaS-PDF:** **Key differentiators for Dociva:**
1. **Trilingual** — EN/AR/FR from day one (Arabic market is largely unserved) 1. **Trilingual** — EN/AR/FR from day one (Arabic market is largely unserved)
2. **No signup** — zero friction, instant file processing 2. **No signup** — zero friction, instant file processing
3. **32 tools** — broader coverage than most competitors 3. **32 tools** — broader coverage than most competitors
@@ -239,7 +239,7 @@ All text is i18n-driven from `seo.{toolKey}.*` keys in EN/AR/FR.
VITE_GA_MEASUREMENT_ID=G-XXXXXXXXXX VITE_GA_MEASUREMENT_ID=G-XXXXXXXXXX
# Plausible Analytics (optional, privacy-friendly) # Plausible Analytics (optional, privacy-friendly)
VITE_PLAUSIBLE_DOMAIN=saas-pdf.com VITE_PLAUSIBLE_DOMAIN=Dociva.com
VITE_PLAUSIBLE_SRC=https://plausible.io/js/script.js VITE_PLAUSIBLE_SRC=https://plausible.io/js/script.js
# Google Search Console verification (optional) # Google Search Console verification (optional)

View File

@@ -1,4 +1,4 @@
# SaaS-PDF — Tool Inventory & Competitive Gap Analysis # Dociva — Tool Inventory & Competitive Gap Analysis
> Generated: March 7, 2026 > Generated: March 7, 2026
> Branch: `feature/critical-maintenance-and-editor` > Branch: `feature/critical-maintenance-and-editor`

View File

@@ -1,4 +1,4 @@
VITE_SITE_DOMAIN=https://saas-pdf.com VITE_SITE_DOMAIN=https://dociva.io
VITE_SENTRY_DSN= VITE_SENTRY_DSN=
VITE_GA_MEASUREMENT_ID=G-XXXXXXXXXX VITE_GA_MEASUREMENT_ID=G-XXXXXXXXXX
VITE_PLAUSIBLE_DOMAIN= VITE_PLAUSIBLE_DOMAIN=

View File

@@ -1,4 +1,4 @@
# CLAUDE.md — SaaS-PDF Codebase Rules & Design System Reference # CLAUDE.md — Dociva Codebase Rules & Design System Reference
> Comprehensive rules document for AI-assisted development and Figma-to-code integration via Model Context Protocol (MCP). > Comprehensive rules document for AI-assisted development and Figma-to-code integration via Model Context Protocol (MCP).
@@ -6,7 +6,7 @@
## 1. Project Overview ## 1. Project Overview
SaaS-PDF is a full-stack web application offering 16+ free online file-processing tools (PDF, image, video, text). The architecture is a **Python/Flask backend** with **Celery workers** for async processing, and a **React + TypeScript frontend** styled with **Tailwind CSS**. Dociva is a full-stack web application offering 16+ free online file-processing tools (PDF, image, video, text). The architecture is a **Python/Flask backend** with **Celery workers** for async processing, and a **React + TypeScript frontend** styled with **Tailwind CSS**.
### Tech Stack Summary ### Tech Stack Summary
@@ -506,7 +506,7 @@ Used via classes: `.progress-bar-animated`, `.animate-in`
### 9.1 Directory Layout ### 9.1 Directory Layout
``` ```
SaaS-PDF/ Dociva/
├── frontend/ # React SPA ├── frontend/ # React SPA
│ ├── src/ │ ├── src/
│ │ ├── components/ # UI Components (layout/, shared/, tools/) │ │ ├── components/ # UI Components (layout/, shared/, tools/)

View File

@@ -6,24 +6,24 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Free online tools for PDF, image, video, and text processing. Merge, split, compress, convert, watermark, protect & more — instantly." /> <meta name="description" content="Free online tools for PDF, image, video, and text processing. Merge, split, compress, convert, watermark, protect & more — instantly." />
<meta name="keywords" content="PDF tools, merge PDF, split PDF, compress PDF, PDF to Word, image converter, free online tools, Arabic PDF tools" /> <meta name="keywords" content="PDF tools, merge PDF, split PDF, compress PDF, PDF to Word, image converter, free online tools, Arabic PDF tools" />
<meta name="author" content="SaaS-PDF" /> <meta name="author" content="Dociva" />
<meta name="robots" content="index, follow" /> <meta name="robots" content="index, follow" />
<meta property="og:type" content="website" /> <meta property="og:type" content="website" />
<meta property="og:title" content="SaaS-PDF — Free Online File Tools" /> <meta property="og:title" content="Dociva — Free Online File Tools" />
<meta property="og:description" content="30+ free tools: merge, split, compress, convert PDFs, images, videos & text. No signup required." /> <meta property="og:description" content="30+ free tools: merge, split, compress, convert PDFs, images, videos & text. No signup required." />
<meta property="og:site_name" content="SaaS-PDF" /> <meta property="og:site_name" content="Dociva" />
<meta property="og:locale" content="en_US" /> <meta property="og:locale" content="en_US" />
<meta property="og:locale:alternate" content="ar_SA" /> <meta property="og:locale:alternate" content="ar_SA" />
<meta property="og:locale:alternate" content="fr_FR" /> <meta property="og:locale:alternate" content="fr_FR" />
<meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="SaaS-PDF — Free Online File Tools" /> <meta name="twitter:title" content="Dociva — Free Online File Tools" />
<meta name="twitter:description" content="30+ free tools: merge, split, compress, convert PDFs, images, videos & text. No signup required." /> <meta name="twitter:description" content="30+ free tools: merge, split, compress, convert PDFs, images, videos & text. No signup required." />
<link rel="dns-prefetch" href="https://fonts.googleapis.com" /> <link rel="dns-prefetch" href="https://fonts.googleapis.com" />
<link rel="dns-prefetch" href="https://fonts.gstatic.com" /> <link rel="dns-prefetch" href="https://fonts.gstatic.com" />
<link rel="preconnect" href="https://fonts.googleapis.com" /> <link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Tajawal:wght@300;400;500;700&display=swap" rel="stylesheet" /> <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Tajawal:wght@300;400;500;700&display=swap" rel="stylesheet" />
<title>SaaS-PDF — Free Online File Tools</title> <title>Dociva — Free Online File Tools</title>
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>

View File

@@ -1,11 +1,11 @@
{ {
"name": "saas-pdf-frontend", "name": "dociva-frontend",
"version": "1.0.0", "version": "1.0.0",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "saas-pdf-frontend", "name": "dociva-frontend",
"version": "1.0.0", "version": "1.0.0",
"dependencies": { "dependencies": {
"axios": "^1.7.0", "axios": "^1.7.0",

View File

@@ -1,5 +1,5 @@
{ {
"name": "saas-pdf-frontend", "name": "dociva-frontend",
"private": true, "private": true,
"version": "1.0.0", "version": "1.0.0",
"type": "module", "type": "module",

View File

@@ -1,7 +1,17 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" fill="none"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" fill="none">
<rect width="64" height="64" rx="14" fill="#4F46E5"/> <!-- Background: rounded square with gradient -->
<path d="M18 20h20a2 2 0 0 1 2 2v20a2 2 0 0 1-2 2H18a2 2 0 0 1-2-2V22a2 2 0 0 1 2-2z" stroke="#fff" stroke-width="2.5" fill="none"/> <defs>
<path d="M22 28h12M22 33h8" stroke="#fff" stroke-width="2" stroke-linecap="round"/> <linearGradient id="bg" x1="0" y1="0" x2="64" y2="64" gradientUnits="userSpaceOnUse">
<path d="M42 24l6-6M48 18v6h-6" stroke="#93C5FD" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/> <stop offset="0%" stop-color="#4F46E5"/>
<path d="M42 40l6 6M48 46v-6h-6" stroke="#93C5FD" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/> <stop offset="100%" stop-color="#7C3AED"/>
</linearGradient>
</defs>
<rect width="64" height="64" rx="14" fill="url(#bg)"/>
<!-- Document icon -->
<path d="M20 16h14l10 10v22a2 2 0 0 1-2 2H20a2 2 0 0 1-2-2V18a2 2 0 0 1 2-2z" fill="rgba(255,255,255,0.15)" stroke="#fff" stroke-width="2"/>
<path d="M34 16v8a2 2 0 0 0 2 2h8" stroke="#fff" stroke-width="2" fill="none"/>
<!-- Text lines -->
<path d="M24 32h16M24 37h12M24 42h8" stroke="#93C5FD" stroke-width="1.8" stroke-linecap="round"/>
<!-- Stylized "D" lettermark -->
<text x="39" y="54" font-family="Arial,Helvetica,sans-serif" font-weight="700" font-size="16" fill="#E0E7FF" opacity="0.6">D</text>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 596 B

After

Width:  |  Height:  |  Size: 957 B

View File

@@ -1,5 +1,5 @@
/* TEAM */ /* TEAM */
Project: SaaS-PDF Project: Dociva
Role: Full-Stack Development Role: Full-Stack Development
Technology: React, TypeScript, Python, Flask, Celery Technology: React, TypeScript, Python, Flask, Celery

View File

@@ -1,7 +1,7 @@
# SaaS-PDF — llms.txt # Dociva — llms.txt
# A description of this site for AI assistants and large language models. # A description of this site for AI assistants and large language models.
> SaaS-PDF is a free, online document toolkit that lets users convert, > Dociva is a free, online document toolkit that lets users convert,
> compress, merge, split, edit, and process PDF files, images, and more — > compress, merge, split, edit, and process PDF files, images, and more —
> directly in the browser with no signup required. > directly in the browser with no signup required.

16
frontend/public/logo.svg Normal file
View File

@@ -0,0 +1,16 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 48" fill="none">
<defs>
<linearGradient id="icon-bg" x1="0" y1="0" x2="48" y2="48" gradientUnits="userSpaceOnUse">
<stop offset="0%" stop-color="#4F46E5"/>
<stop offset="100%" stop-color="#7C3AED"/>
</linearGradient>
</defs>
<!-- Icon -->
<rect width="42" height="42" rx="10" y="3" fill="url(#icon-bg)"/>
<path d="M13 12h10l7 7v15a1.5 1.5 0 0 1-1.5 1.5H13A1.5 1.5 0 0 1 11.5 34V13.5A1.5 1.5 0 0 1 13 12z" fill="rgba(255,255,255,0.15)" stroke="#fff" stroke-width="1.5"/>
<path d="M23 12v6a1.5 1.5 0 0 0 1.5 1.5H30" stroke="#fff" stroke-width="1.5" fill="none"/>
<path d="M16 24h12M16 28h9M16 32h6" stroke="#93C5FD" stroke-width="1.2" stroke-linecap="round"/>
<!-- Wordmark: dociva -->
<text x="52" y="33" font-family="Inter,system-ui,Arial,sans-serif" font-weight="700" font-size="28" letter-spacing="-0.5" fill="#1E1B4B">doc</text>
<text x="118" y="33" font-family="Inter,system-ui,Arial,sans-serif" font-weight="700" font-size="28" letter-spacing="-0.5" fill="#4F46E5">iva</text>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -1,4 +1,4 @@
# robots.txt — SaaS-PDF # robots.txt — Dociva
User-agent: * User-agent: *
Allow: / Allow: /
Disallow: /api/ Disallow: /api/
@@ -7,7 +7,7 @@ Disallow: /forgot-password
Disallow: /reset-password Disallow: /reset-password
# Sitemaps # Sitemaps
Sitemap: https://saas-pdf.com/sitemap.xml Sitemap: https://dociva.io/sitemap.xml
# AI/LLM discoverability # AI/LLM discoverability
# See also: /llms.txt # See also: /llms.txt

View File

@@ -1,43 +1,43 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url> <url>
<loc>https://saas-pdf.com/</loc> <loc>https://dociva.io/</loc>
<lastmod>2026-03-14</lastmod> <lastmod>2026-03-14</lastmod>
<changefreq>daily</changefreq> <changefreq>daily</changefreq>
<priority>1.0</priority> <priority>1.0</priority>
</url> </url>
<url> <url>
<loc>https://saas-pdf.com/about</loc> <loc>https://dociva.io/about</loc>
<lastmod>2026-03-14</lastmod> <lastmod>2026-03-14</lastmod>
<changefreq>monthly</changefreq> <changefreq>monthly</changefreq>
<priority>0.4</priority> <priority>0.4</priority>
</url> </url>
<url> <url>
<loc>https://saas-pdf.com/contact</loc> <loc>https://dociva.io/contact</loc>
<lastmod>2026-03-14</lastmod> <lastmod>2026-03-14</lastmod>
<changefreq>monthly</changefreq> <changefreq>monthly</changefreq>
<priority>0.4</priority> <priority>0.4</priority>
</url> </url>
<url> <url>
<loc>https://saas-pdf.com/privacy</loc> <loc>https://dociva.io/privacy</loc>
<lastmod>2026-03-14</lastmod> <lastmod>2026-03-14</lastmod>
<changefreq>yearly</changefreq> <changefreq>yearly</changefreq>
<priority>0.3</priority> <priority>0.3</priority>
</url> </url>
<url> <url>
<loc>https://saas-pdf.com/terms</loc> <loc>https://dociva.io/terms</loc>
<lastmod>2026-03-14</lastmod> <lastmod>2026-03-14</lastmod>
<changefreq>yearly</changefreq> <changefreq>yearly</changefreq>
<priority>0.3</priority> <priority>0.3</priority>
</url> </url>
<url> <url>
<loc>https://saas-pdf.com/pricing</loc> <loc>https://dociva.io/pricing</loc>
<lastmod>2026-03-14</lastmod> <lastmod>2026-03-14</lastmod>
<changefreq>monthly</changefreq> <changefreq>monthly</changefreq>
<priority>0.7</priority> <priority>0.7</priority>
</url> </url>
<url> <url>
<loc>https://saas-pdf.com/blog</loc> <loc>https://dociva.io/blog</loc>
<lastmod>2026-03-14</lastmod> <lastmod>2026-03-14</lastmod>
<changefreq>weekly</changefreq> <changefreq>weekly</changefreq>
<priority>0.6</priority> <priority>0.6</priority>
@@ -45,109 +45,109 @@
<!-- PDF Tools --> <!-- PDF Tools -->
<url> <url>
<loc>https://saas-pdf.com/tools/pdf-to-word</loc> <loc>https://dociva.io/tools/pdf-to-word</loc>
<lastmod>2026-03-14</lastmod> <lastmod>2026-03-14</lastmod>
<changefreq>weekly</changefreq> <changefreq>weekly</changefreq>
<priority>0.9</priority> <priority>0.9</priority>
</url> </url>
<url> <url>
<loc>https://saas-pdf.com/tools/word-to-pdf</loc> <loc>https://dociva.io/tools/word-to-pdf</loc>
<lastmod>2026-03-14</lastmod> <lastmod>2026-03-14</lastmod>
<changefreq>weekly</changefreq> <changefreq>weekly</changefreq>
<priority>0.9</priority> <priority>0.9</priority>
</url> </url>
<url> <url>
<loc>https://saas-pdf.com/tools/compress-pdf</loc> <loc>https://dociva.io/tools/compress-pdf</loc>
<lastmod>2026-03-14</lastmod> <lastmod>2026-03-14</lastmod>
<changefreq>weekly</changefreq> <changefreq>weekly</changefreq>
<priority>0.9</priority> <priority>0.9</priority>
</url> </url>
<url> <url>
<loc>https://saas-pdf.com/tools/merge-pdf</loc> <loc>https://dociva.io/tools/merge-pdf</loc>
<lastmod>2026-03-14</lastmod> <lastmod>2026-03-14</lastmod>
<changefreq>weekly</changefreq> <changefreq>weekly</changefreq>
<priority>0.9</priority> <priority>0.9</priority>
</url> </url>
<url> <url>
<loc>https://saas-pdf.com/tools/split-pdf</loc> <loc>https://dociva.io/tools/split-pdf</loc>
<lastmod>2026-03-14</lastmod> <lastmod>2026-03-14</lastmod>
<changefreq>weekly</changefreq> <changefreq>weekly</changefreq>
<priority>0.8</priority> <priority>0.8</priority>
</url> </url>
<url> <url>
<loc>https://saas-pdf.com/tools/rotate-pdf</loc> <loc>https://dociva.io/tools/rotate-pdf</loc>
<lastmod>2026-03-14</lastmod> <lastmod>2026-03-14</lastmod>
<changefreq>weekly</changefreq> <changefreq>weekly</changefreq>
<priority>0.7</priority> <priority>0.7</priority>
</url> </url>
<url> <url>
<loc>https://saas-pdf.com/tools/pdf-to-images</loc> <loc>https://dociva.io/tools/pdf-to-images</loc>
<lastmod>2026-03-14</lastmod> <lastmod>2026-03-14</lastmod>
<changefreq>weekly</changefreq> <changefreq>weekly</changefreq>
<priority>0.8</priority> <priority>0.8</priority>
</url> </url>
<url> <url>
<loc>https://saas-pdf.com/tools/images-to-pdf</loc> <loc>https://dociva.io/tools/images-to-pdf</loc>
<lastmod>2026-03-14</lastmod> <lastmod>2026-03-14</lastmod>
<changefreq>weekly</changefreq> <changefreq>weekly</changefreq>
<priority>0.8</priority> <priority>0.8</priority>
</url> </url>
<url> <url>
<loc>https://saas-pdf.com/tools/watermark-pdf</loc> <loc>https://dociva.io/tools/watermark-pdf</loc>
<lastmod>2026-03-14</lastmod> <lastmod>2026-03-14</lastmod>
<changefreq>weekly</changefreq> <changefreq>weekly</changefreq>
<priority>0.7</priority> <priority>0.7</priority>
</url> </url>
<url> <url>
<loc>https://saas-pdf.com/tools/remove-watermark-pdf</loc> <loc>https://dociva.io/tools/remove-watermark-pdf</loc>
<lastmod>2026-03-14</lastmod> <lastmod>2026-03-14</lastmod>
<changefreq>weekly</changefreq> <changefreq>weekly</changefreq>
<priority>0.7</priority> <priority>0.7</priority>
</url> </url>
<url> <url>
<loc>https://saas-pdf.com/tools/protect-pdf</loc> <loc>https://dociva.io/tools/protect-pdf</loc>
<lastmod>2026-03-14</lastmod> <lastmod>2026-03-14</lastmod>
<changefreq>weekly</changefreq> <changefreq>weekly</changefreq>
<priority>0.8</priority> <priority>0.8</priority>
</url> </url>
<url> <url>
<loc>https://saas-pdf.com/tools/unlock-pdf</loc> <loc>https://dociva.io/tools/unlock-pdf</loc>
<lastmod>2026-03-14</lastmod> <lastmod>2026-03-14</lastmod>
<changefreq>weekly</changefreq> <changefreq>weekly</changefreq>
<priority>0.8</priority> <priority>0.8</priority>
</url> </url>
<url> <url>
<loc>https://saas-pdf.com/tools/page-numbers</loc> <loc>https://dociva.io/tools/page-numbers</loc>
<lastmod>2026-03-14</lastmod> <lastmod>2026-03-14</lastmod>
<changefreq>weekly</changefreq> <changefreq>weekly</changefreq>
<priority>0.7</priority> <priority>0.7</priority>
</url> </url>
<url> <url>
<loc>https://saas-pdf.com/tools/reorder-pdf</loc> <loc>https://dociva.io/tools/reorder-pdf</loc>
<lastmod>2026-03-14</lastmod> <lastmod>2026-03-14</lastmod>
<changefreq>weekly</changefreq> <changefreq>weekly</changefreq>
<priority>0.7</priority> <priority>0.7</priority>
</url> </url>
<url> <url>
<loc>https://saas-pdf.com/tools/extract-pages</loc> <loc>https://dociva.io/tools/extract-pages</loc>
<lastmod>2026-03-14</lastmod> <lastmod>2026-03-14</lastmod>
<changefreq>weekly</changefreq> <changefreq>weekly</changefreq>
<priority>0.7</priority> <priority>0.7</priority>
</url> </url>
<url> <url>
<loc>https://saas-pdf.com/tools/pdf-editor</loc> <loc>https://dociva.io/tools/pdf-editor</loc>
<lastmod>2026-03-14</lastmod> <lastmod>2026-03-14</lastmod>
<changefreq>weekly</changefreq> <changefreq>weekly</changefreq>
<priority>0.8</priority> <priority>0.8</priority>
</url> </url>
<url> <url>
<loc>https://saas-pdf.com/tools/pdf-flowchart</loc> <loc>https://dociva.io/tools/pdf-flowchart</loc>
<lastmod>2026-03-14</lastmod> <lastmod>2026-03-14</lastmod>
<changefreq>weekly</changefreq> <changefreq>weekly</changefreq>
<priority>0.7</priority> <priority>0.7</priority>
</url> </url>
<url> <url>
<loc>https://saas-pdf.com/tools/pdf-to-excel</loc> <loc>https://dociva.io/tools/pdf-to-excel</loc>
<lastmod>2026-03-14</lastmod> <lastmod>2026-03-14</lastmod>
<changefreq>weekly</changefreq> <changefreq>weekly</changefreq>
<priority>0.8</priority> <priority>0.8</priority>
@@ -155,25 +155,25 @@
<!-- Image Tools --> <!-- Image Tools -->
<url> <url>
<loc>https://saas-pdf.com/tools/image-converter</loc> <loc>https://dociva.io/tools/image-converter</loc>
<lastmod>2026-03-14</lastmod> <lastmod>2026-03-14</lastmod>
<changefreq>weekly</changefreq> <changefreq>weekly</changefreq>
<priority>0.8</priority> <priority>0.8</priority>
</url> </url>
<url> <url>
<loc>https://saas-pdf.com/tools/image-resize</loc> <loc>https://dociva.io/tools/image-resize</loc>
<lastmod>2026-03-14</lastmod> <lastmod>2026-03-14</lastmod>
<changefreq>weekly</changefreq> <changefreq>weekly</changefreq>
<priority>0.8</priority> <priority>0.8</priority>
</url> </url>
<url> <url>
<loc>https://saas-pdf.com/tools/compress-image</loc> <loc>https://dociva.io/tools/compress-image</loc>
<lastmod>2026-03-14</lastmod> <lastmod>2026-03-14</lastmod>
<changefreq>weekly</changefreq> <changefreq>weekly</changefreq>
<priority>0.8</priority> <priority>0.8</priority>
</url> </url>
<url> <url>
<loc>https://saas-pdf.com/tools/remove-background</loc> <loc>https://dociva.io/tools/remove-background</loc>
<lastmod>2026-03-14</lastmod> <lastmod>2026-03-14</lastmod>
<changefreq>weekly</changefreq> <changefreq>weekly</changefreq>
<priority>0.8</priority> <priority>0.8</priority>
@@ -181,31 +181,31 @@
<!-- AI Tools --> <!-- AI Tools -->
<url> <url>
<loc>https://saas-pdf.com/tools/ocr</loc> <loc>https://dociva.io/tools/ocr</loc>
<lastmod>2026-03-14</lastmod> <lastmod>2026-03-14</lastmod>
<changefreq>weekly</changefreq> <changefreq>weekly</changefreq>
<priority>0.8</priority> <priority>0.8</priority>
</url> </url>
<url> <url>
<loc>https://saas-pdf.com/tools/chat-pdf</loc> <loc>https://dociva.io/tools/chat-pdf</loc>
<lastmod>2026-03-14</lastmod> <lastmod>2026-03-14</lastmod>
<changefreq>weekly</changefreq> <changefreq>weekly</changefreq>
<priority>0.8</priority> <priority>0.8</priority>
</url> </url>
<url> <url>
<loc>https://saas-pdf.com/tools/summarize-pdf</loc> <loc>https://dociva.io/tools/summarize-pdf</loc>
<lastmod>2026-03-14</lastmod> <lastmod>2026-03-14</lastmod>
<changefreq>weekly</changefreq> <changefreq>weekly</changefreq>
<priority>0.8</priority> <priority>0.8</priority>
</url> </url>
<url> <url>
<loc>https://saas-pdf.com/tools/translate-pdf</loc> <loc>https://dociva.io/tools/translate-pdf</loc>
<lastmod>2026-03-14</lastmod> <lastmod>2026-03-14</lastmod>
<changefreq>weekly</changefreq> <changefreq>weekly</changefreq>
<priority>0.8</priority> <priority>0.8</priority>
</url> </url>
<url> <url>
<loc>https://saas-pdf.com/tools/extract-tables</loc> <loc>https://dociva.io/tools/extract-tables</loc>
<lastmod>2026-03-14</lastmod> <lastmod>2026-03-14</lastmod>
<changefreq>weekly</changefreq> <changefreq>weekly</changefreq>
<priority>0.8</priority> <priority>0.8</priority>
@@ -213,31 +213,31 @@
<!-- Utility Tools --> <!-- Utility Tools -->
<url> <url>
<loc>https://saas-pdf.com/tools/html-to-pdf</loc> <loc>https://dociva.io/tools/html-to-pdf</loc>
<lastmod>2026-03-14</lastmod> <lastmod>2026-03-14</lastmod>
<changefreq>weekly</changefreq> <changefreq>weekly</changefreq>
<priority>0.7</priority> <priority>0.7</priority>
</url> </url>
<url> <url>
<loc>https://saas-pdf.com/tools/qr-code</loc> <loc>https://dociva.io/tools/qr-code</loc>
<lastmod>2026-03-14</lastmod> <lastmod>2026-03-14</lastmod>
<changefreq>weekly</changefreq> <changefreq>weekly</changefreq>
<priority>0.7</priority> <priority>0.7</priority>
</url> </url>
<url> <url>
<loc>https://saas-pdf.com/tools/video-to-gif</loc> <loc>https://dociva.io/tools/video-to-gif</loc>
<lastmod>2026-03-14</lastmod> <lastmod>2026-03-14</lastmod>
<changefreq>weekly</changefreq> <changefreq>weekly</changefreq>
<priority>0.7</priority> <priority>0.7</priority>
</url> </url>
<url> <url>
<loc>https://saas-pdf.com/tools/word-counter</loc> <loc>https://dociva.io/tools/word-counter</loc>
<lastmod>2026-03-14</lastmod> <lastmod>2026-03-14</lastmod>
<changefreq>weekly</changefreq> <changefreq>weekly</changefreq>
<priority>0.6</priority> <priority>0.6</priority>
</url> </url>
<url> <url>
<loc>https://saas-pdf.com/tools/text-cleaner</loc> <loc>https://dociva.io/tools/text-cleaner</loc>
<lastmod>2026-03-14</lastmod> <lastmod>2026-03-14</lastmod>
<changefreq>weekly</changefreq> <changefreq>weekly</changefreq>
<priority>0.6</priority> <priority>0.6</priority>

View File

@@ -19,7 +19,7 @@ interface AssistantStorageState {
messages: AssistantMessage[]; messages: AssistantMessage[];
} }
const STORAGE_KEY = 'saaspdf:site-assistant:v1'; const STORAGE_KEY = 'dociva:site-assistant:v1';
const MAX_STORED_MESSAGES = 20; const MAX_STORED_MESSAGES = 20;
const ASSISTANT_ENABLED = import.meta.env.VITE_SITE_ASSISTANT_ENABLED !== 'false'; const ASSISTANT_ENABLED = import.meta.env.VITE_SITE_ASSISTANT_ENABLED !== 'false';

View File

@@ -2,10 +2,10 @@ import { Helmet } from 'react-helmet-async';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { buildLanguageAlternates, getOgLocale } from '@/utils/seo'; import { buildLanguageAlternates, getOgLocale } from '@/utils/seo';
const SITE_NAME = 'SaaS-PDF'; const SITE_NAME = 'Dociva';
interface SEOHeadProps { interface SEOHeadProps {
/** Page title (will be appended with " — SaaS-PDF") */ /** Page title (will be appended with " — Dociva") */
title: string; title: string;
/** Meta description */ /** Meta description */
description: string; description: string;

View File

@@ -1,6 +1,6 @@
{ {
"common": { "common": {
"appName": "SaaS-PDF", "appName": "Dociva",
"tagline": "أدوات ملفات مجانية على الإنترنت", "tagline": "أدوات ملفات مجانية على الإنترنت",
"upload": "رفع ملف", "upload": "رفع ملف",
"download": "تحميل", "download": "تحميل",
@@ -78,7 +78,7 @@
"thinking": "جارٍ التفكير...", "thinking": "جارٍ التفكير...",
"unavailable": "المساعد غير متاح مؤقتاً. يرجى المحاولة بعد قليل.", "unavailable": "المساعد غير متاح مؤقتاً. يرجى المحاولة بعد قليل.",
"close": "إغلاق المساعد", "close": "إغلاق المساعد",
"fabTitle": "اسأل SaaS-PDF", "fabTitle": "اسأل Dociva",
"fabSubtitle": "مساعدة ذكية عبر جميع الأدوات", "fabSubtitle": "مساعدة ذكية عبر جميع الأدوات",
"prompts": { "prompts": {
"currentTool": "كيف أستخدم {{tool}}؟", "currentTool": "كيف أستخدم {{tool}}؟",
@@ -155,10 +155,10 @@
}, },
"pages": { "pages": {
"about": { "about": {
"metaDescription": "تعرّف على SaaS-PDF — أدوات ملفات مجانية وسريعة وآمنة عبر الإنترنت لملفات PDF والصور والفيديو والنصوص. لا حاجة للتسجيل.", "metaDescription": "تعرّف على Dociva — أدوات ملفات مجانية وسريعة وآمنة عبر الإنترنت لملفات PDF والصور والفيديو والنصوص. لا حاجة للتسجيل.",
"title": "عن SaaS-PDF", "title": "عن Dociva",
"missionTitle": "مهمتنا", "missionTitle": "مهمتنا",
"missionText": "تم بناء SaaS-PDF لجعل أدوات الملفات الاحترافية متاحة للجميع — مجاناً. نؤمن بأن تحويل المستندات وضغطها وتعديلها يجب أن يكون بسيطاً وسريعاً وخاصاً. لا تسجيل، لا رسوم خفية، لا برامج للتثبيت.", "missionText": "تم بناء Dociva لجعل أدوات الملفات الاحترافية متاحة للجميع — مجاناً. نؤمن بأن تحويل المستندات وضغطها وتعديلها يجب أن يكون بسيطاً وسريعاً وخاصاً. لا تسجيل، لا رسوم خفية، لا برامج للتثبيت.",
"technologyTitle": "التقنية", "technologyTitle": "التقنية",
"technologyText": "منصتنا مدعومة ببنية تحتية سحابية حديثة مصممة للسرعة والموثوقية. تتم معالجة الملفات على الخادم باستخدام مكتبات مفتوحة المصدر رائدة في الصناعة، مما يضمن تحويلات دقيقة ومخرجات عالية الجودة في كل مرة. تستفيد أدواتنا المدعومة بالذكاء الاصطناعي من نماذج التعلم الآلي المتقدمة لتحليل المستندات والترجمة والتلخيص بذكاء.", "technologyText": "منصتنا مدعومة ببنية تحتية سحابية حديثة مصممة للسرعة والموثوقية. تتم معالجة الملفات على الخادم باستخدام مكتبات مفتوحة المصدر رائدة في الصناعة، مما يضمن تحويلات دقيقة ومخرجات عالية الجودة في كل مرة. تستفيد أدواتنا المدعومة بالذكاء الاصطناعي من نماذج التعلم الآلي المتقدمة لتحليل المستندات والترجمة والتلخيص بذكاء.",
"securityTitle": "الأمان", "securityTitle": "الأمان",
@@ -175,7 +175,7 @@
] ]
}, },
"contact": { "contact": {
"metaDescription": "تواصل مع فريق SaaS-PDF. أبلغ عن خطأ أو اطلب ميزة جديدة أو أرسل لنا رسالة.", "metaDescription": "تواصل مع فريق Dociva. أبلغ عن خطأ أو اطلب ميزة جديدة أو أرسل لنا رسالة.",
"title": "اتصل بنا", "title": "اتصل بنا",
"subtitle": "لديك سؤال أو وجدت خطأ أو تريد طلب ميزة جديدة؟ يسعدنا سماع رأيك.", "subtitle": "لديك سؤال أو وجدت خطأ أو تريد طلب ميزة جديدة؟ يسعدنا سماع رأيك.",
"formTitle": "أرسل لنا رسالة", "formTitle": "أرسل لنا رسالة",
@@ -196,7 +196,7 @@
"responseTime": "نرد عادةً خلال 24-48 ساعة." "responseTime": "نرد عادةً خلال 24-48 ساعة."
}, },
"privacy": { "privacy": {
"metaDescription": "سياسة الخصوصية لـ SaaS-PDF. تعرّف على كيفية تعاملنا مع ملفاتك وبياناتك بشفافية كاملة.", "metaDescription": "سياسة الخصوصية لـ Dociva. تعرّف على كيفية تعاملنا مع ملفاتك وبياناتك بشفافية كاملة.",
"title": "سياسة الخصوصية", "title": "سياسة الخصوصية",
"lastUpdated": "آخر تحديث: {{date}}", "lastUpdated": "آخر تحديث: {{date}}",
"dataCollectionTitle": "1. جمع البيانات", "dataCollectionTitle": "1. جمع البيانات",
@@ -226,13 +226,13 @@
"contactText": "أسئلة حول هذه السياسة؟ تواصل معنا على" "contactText": "أسئلة حول هذه السياسة؟ تواصل معنا على"
}, },
"terms": { "terms": {
"metaDescription": "شروط استخدام SaaS-PDF. تعرّف على القواعد والإرشادات لاستخدام أدواتنا المجانية عبر الإنترنت.", "metaDescription": "شروط استخدام Dociva. تعرّف على القواعد والإرشادات لاستخدام أدواتنا المجانية عبر الإنترنت.",
"title": "شروط الاستخدام", "title": "شروط الاستخدام",
"lastUpdated": "آخر تحديث: {{date}}", "lastUpdated": "آخر تحديث: {{date}}",
"acceptanceTitle": "1. قبول الشروط", "acceptanceTitle": "1. قبول الشروط",
"acceptanceText": "باستخدامك لموقع SaaS-PDF، فإنك توافق على الالتزام بشروط الاستخدام هذه. إذا كنت لا توافق، يرجى التوقف عن الاستخدام فوراً.", "acceptanceText": "باستخدامك لموقع Dociva، فإنك توافق على الالتزام بشروط الاستخدام هذه. إذا كنت لا توافق، يرجى التوقف عن الاستخدام فوراً.",
"serviceTitle": "2. وصف الخدمة", "serviceTitle": "2. وصف الخدمة",
"serviceText": "يوفر SaaS-PDF أدوات مجانية عبر الإنترنت لتحويل الملفات وضغطها ومعالجتها. يتم تقديم الخدمة \"كما هي\" بدون ضمانات من أي نوع.", "serviceText": "يوفر Dociva أدوات مجانية عبر الإنترنت لتحويل الملفات وضغطها ومعالجتها. يتم تقديم الخدمة \"كما هي\" بدون ضمانات من أي نوع.",
"useTitle": "3. الاستخدام المقبول", "useTitle": "3. الاستخدام المقبول",
"useItems": [ "useItems": [
"يجب أن ترفع فقط ملفات لديك الحق في معالجتها.", "يجب أن ترفع فقط ملفات لديك الحق في معالجتها.",
@@ -248,9 +248,9 @@
"لا نضمن الحفاظ على أي محتوى مرفوع بعد فترة المعالجة." "لا نضمن الحفاظ على أي محتوى مرفوع بعد فترة المعالجة."
], ],
"liabilityTitle": "5. تحديد المسؤولية", "liabilityTitle": "5. تحديد المسؤولية",
"liabilityText": "لن يكون SaaS-PDF مسؤولاً عن أي أضرار مباشرة أو غير مباشرة أو عرضية أو تبعية ناتجة عن استخدام الخدمة أو عدم القدرة على استخدامها. استخدام الخدمة على مسؤوليتك.", "liabilityText": "لن يكون Dociva مسؤولاً عن أي أضرار مباشرة أو غير مباشرة أو عرضية أو تبعية ناتجة عن استخدام الخدمة أو عدم القدرة على استخدامها. استخدام الخدمة على مسؤوليتك.",
"ipTitle": "6. الملكية الفكرية", "ipTitle": "6. الملكية الفكرية",
"ipText": "جميع الأدوات والواجهات والمحتوى على SaaS-PDF هي ملكية فكرية لمشغلي الخدمة. تحتفظ بملكية كاملة لجميع الملفات التي ترفعها وتعالجها.", "ipText": "جميع الأدوات والواجهات والمحتوى على Dociva هي ملكية فكرية لمشغلي الخدمة. تحتفظ بملكية كاملة لجميع الملفات التي ترفعها وتعالجها.",
"changesTitle": "7. التغييرات على الشروط", "changesTitle": "7. التغييرات على الشروط",
"changesText": "نحتفظ بالحق في تعديل هذه الشروط في أي وقت. الاستمرار في استخدام الخدمة بعد التغييرات يعني قبول الشروط المحدثة.", "changesText": "نحتفظ بالحق في تعديل هذه الشروط في أي وقت. الاستمرار في استخدام الخدمة بعد التغييرات يعني قبول الشروط المحدثة.",
"contactTitle": "8. الاتصال", "contactTitle": "8. الاتصال",
@@ -285,8 +285,8 @@
"totalRatings": "تقييم" "totalRatings": "تقييم"
}, },
"pricing": { "pricing": {
"metaTitle": "الأسعار — SaaS-PDF", "metaTitle": "الأسعار — Dociva",
"metaDescription": "قارن بين الخطة المجانية والاحترافية لـ SaaS-PDF. استخدم أكثر من 30 أداة مجانًا أو قم بالترقية للمعالجة غير المحدودة.", "metaDescription": "قارن بين الخطة المجانية والاحترافية لـ Dociva. استخدم أكثر من 30 أداة مجانًا أو قم بالترقية للمعالجة غير المحدودة.",
"title": "الخطط والأسعار", "title": "الخطط والأسعار",
"subtitle": "ابدأ مجانًا وقم بالترقية عندما تحتاج المزيد.", "subtitle": "ابدأ مجانًا وقم بالترقية عندما تحتاج المزيد.",
"free": "مجاني", "free": "مجاني",
@@ -338,9 +338,9 @@
"trustApiDesc": "يمكن لمساحات العمل الاحترافية إنشاء مفاتيح API وربط الأدوات نفسها مع الأتمتة الداخلية أو تدفقات العملاء." "trustApiDesc": "يمكن لمساحات العمل الاحترافية إنشاء مفاتيح API وربط الأدوات نفسها مع الأتمتة الداخلية أو تدفقات العملاء."
}, },
"developers": { "developers": {
"metaDescription": "استكشف بوابة مطوري SaaS-PDF، وتدفق API غير المتزامن، والنقاط الجاهزة لأتمتة المستندات.", "metaDescription": "استكشف بوابة مطوري Dociva، وتدفق API غير المتزامن، والنقاط الجاهزة لأتمتة المستندات.",
"badge": "بوابة المطورين", "badge": "بوابة المطورين",
"title": "ابنِ تدفقات المستندات فوق واجهة SaaS-PDF البرمجية", "title": "ابنِ تدفقات المستندات فوق واجهة Dociva البرمجية",
"subtitle": "استخدم نقاط التحويل والضغط وOCR والذكاء الاصطناعي نفسها الموجودة خلف التطبيق داخل أنظمتك الخاصة.", "subtitle": "استخدم نقاط التحويل والضغط وOCR والذكاء الاصطناعي نفسها الموجودة خلف التطبيق داخل أنظمتك الخاصة.",
"getApiKey": "احصل على مفتاح API", "getApiKey": "احصل على مفتاح API",
"comparePlans": "قارن الخطط", "comparePlans": "قارن الخطط",

View File

@@ -1,6 +1,6 @@
{ {
"common": { "common": {
"appName": "SaaS-PDF", "appName": "Dociva",
"tagline": "Free Online File Tools", "tagline": "Free Online File Tools",
"upload": "Upload File", "upload": "Upload File",
"download": "Download", "download": "Download",
@@ -78,7 +78,7 @@
"thinking": "Thinking...", "thinking": "Thinking...",
"unavailable": "The assistant is temporarily unavailable. Please try again in a moment.", "unavailable": "The assistant is temporarily unavailable. Please try again in a moment.",
"close": "Close assistant", "close": "Close assistant",
"fabTitle": "Ask SaaS-PDF", "fabTitle": "Ask Dociva",
"fabSubtitle": "Smart help across all tools", "fabSubtitle": "Smart help across all tools",
"prompts": { "prompts": {
"currentTool": "How do I use {{tool}}?", "currentTool": "How do I use {{tool}}?",
@@ -155,10 +155,10 @@
}, },
"pages": { "pages": {
"about": { "about": {
"metaDescription": "Learn about SaaS-PDF — free, fast, and secure online file tools for PDFs, images, video, and text. No registration required.", "metaDescription": "Learn about Dociva — free, fast, and secure online file tools for PDFs, images, video, and text. No registration required.",
"title": "About SaaS-PDF", "title": "About Dociva",
"missionTitle": "Our Mission", "missionTitle": "Our Mission",
"missionText": "SaaS-PDF was built to make professional-grade file tools accessible to everyone — for free. We believe that converting, compressing, and editing documents should be simple, fast, and private. No sign-ups, no hidden fees, no software to install.", "missionText": "Dociva was built to make professional-grade file tools accessible to everyone — for free. We believe that converting, compressing, and editing documents should be simple, fast, and private. No sign-ups, no hidden fees, no software to install.",
"technologyTitle": "Technology", "technologyTitle": "Technology",
"technologyText": "Our platform is powered by modern cloud infrastructure designed for speed and reliability. Files are processed server-side using industry-leading open-source libraries, ensuring accurate conversions and high-quality output every time. Our AI-powered tools leverage advanced machine learning models for intelligent document analysis, translation, and summarization.", "technologyText": "Our platform is powered by modern cloud infrastructure designed for speed and reliability. Files are processed server-side using industry-leading open-source libraries, ensuring accurate conversions and high-quality output every time. Our AI-powered tools leverage advanced machine learning models for intelligent document analysis, translation, and summarization.",
"securityTitle": "Security", "securityTitle": "Security",
@@ -175,7 +175,7 @@
] ]
}, },
"contact": { "contact": {
"metaDescription": "Contact the SaaS-PDF team. Report bugs, request features, or send us a message.", "metaDescription": "Contact the Dociva team. Report bugs, request features, or send us a message.",
"title": "Contact Us", "title": "Contact Us",
"subtitle": "Have a question, found a bug, or want to request a feature? We'd love to hear from you.", "subtitle": "Have a question, found a bug, or want to request a feature? We'd love to hear from you.",
"formTitle": "Send Us a Message", "formTitle": "Send Us a Message",
@@ -196,7 +196,7 @@
"responseTime": "We typically respond within 2448 hours." "responseTime": "We typically respond within 2448 hours."
}, },
"privacy": { "privacy": {
"metaDescription": "Privacy policy for SaaS-PDF. Learn how we handle your files and data with full transparency.", "metaDescription": "Privacy policy for Dociva. Learn how we handle your files and data with full transparency.",
"title": "Privacy Policy", "title": "Privacy Policy",
"lastUpdated": "Last updated: {{date}}", "lastUpdated": "Last updated: {{date}}",
"dataCollectionTitle": "1. Data Collection", "dataCollectionTitle": "1. Data Collection",
@@ -226,13 +226,13 @@
"contactText": "Questions about this policy? Contact us at" "contactText": "Questions about this policy? Contact us at"
}, },
"terms": { "terms": {
"metaDescription": "Terms of service for SaaS-PDF. Understand the rules and guidelines for using our free online tools.", "metaDescription": "Terms of service for Dociva. Understand the rules and guidelines for using our free online tools.",
"title": "Terms of Service", "title": "Terms of Service",
"lastUpdated": "Last updated: {{date}}", "lastUpdated": "Last updated: {{date}}",
"acceptanceTitle": "1. Acceptance of Terms", "acceptanceTitle": "1. Acceptance of Terms",
"acceptanceText": "By accessing and using SaaS-PDF, you agree to be bound by these Terms of Service. If you do not agree, please discontinue use immediately.", "acceptanceText": "By accessing and using Dociva, you agree to be bound by these Terms of Service. If you do not agree, please discontinue use immediately.",
"serviceTitle": "2. Service Description", "serviceTitle": "2. Service Description",
"serviceText": "SaaS-PDF provides free online tools for file conversion, compression, and transformation. The service is provided \"as is\" without warranties of any kind.", "serviceText": "Dociva provides free online tools for file conversion, compression, and transformation. The service is provided \"as is\" without warranties of any kind.",
"useTitle": "3. Acceptable Use", "useTitle": "3. Acceptable Use",
"useItems": [ "useItems": [
"You may only upload files that you have the right to process.", "You may only upload files that you have the right to process.",
@@ -248,9 +248,9 @@
"We do not guarantee the preservation of any uploaded content beyond the processing window." "We do not guarantee the preservation of any uploaded content beyond the processing window."
], ],
"liabilityTitle": "5. Limitation of Liability", "liabilityTitle": "5. Limitation of Liability",
"liabilityText": "SaaS-PDF shall not be liable for any direct, indirect, incidental, or consequential damages resulting from the use or inability to use the service. Use of the service is at your own risk.", "liabilityText": "Dociva shall not be liable for any direct, indirect, incidental, or consequential damages resulting from the use or inability to use the service. Use of the service is at your own risk.",
"ipTitle": "6. Intellectual Property", "ipTitle": "6. Intellectual Property",
"ipText": "All tools, interfaces, and content on SaaS-PDF are the intellectual property of the service operators. You retain full ownership of all files you upload and process.", "ipText": "All tools, interfaces, and content on Dociva are the intellectual property of the service operators. You retain full ownership of all files you upload and process.",
"changesTitle": "7. Changes to Terms", "changesTitle": "7. Changes to Terms",
"changesText": "We reserve the right to modify these terms at any time. Continued use of the service after changes constitutes acceptance of the updated terms.", "changesText": "We reserve the right to modify these terms at any time. Continued use of the service after changes constitutes acceptance of the updated terms.",
"contactTitle": "8. Contact", "contactTitle": "8. Contact",
@@ -285,8 +285,8 @@
"totalRatings": "ratings" "totalRatings": "ratings"
}, },
"pricing": { "pricing": {
"metaTitle": "Pricing — SaaS-PDF", "metaTitle": "Pricing — Dociva",
"metaDescription": "Compare free and pro plans for SaaS-PDF. Access 30+ tools for free, or upgrade for unlimited processing.", "metaDescription": "Compare free and pro plans for Dociva. Access 30+ tools for free, or upgrade for unlimited processing.",
"title": "Plans & Pricing", "title": "Plans & Pricing",
"subtitle": "Start free and upgrade when you need more.", "subtitle": "Start free and upgrade when you need more.",
"free": "Free", "free": "Free",
@@ -338,9 +338,9 @@
"trustApiDesc": "Pro workspaces can generate API keys and connect the same tools to internal automations and client flows." "trustApiDesc": "Pro workspaces can generate API keys and connect the same tools to internal automations and client flows."
}, },
"developers": { "developers": {
"metaDescription": "Explore the SaaS-PDF developer portal, async API flow, and production-ready endpoints for document automation.", "metaDescription": "Explore the Dociva developer portal, async API flow, and production-ready endpoints for document automation.",
"badge": "Developer Portal", "badge": "Developer Portal",
"title": "Build document workflows on top of the SaaS-PDF API", "title": "Build document workflows on top of the Dociva API",
"subtitle": "Use the same conversion, compression, OCR, and AI endpoints behind the web app inside your own systems.", "subtitle": "Use the same conversion, compression, OCR, and AI endpoints behind the web app inside your own systems.",
"getApiKey": "Get an API key", "getApiKey": "Get an API key",
"comparePlans": "Compare plans", "comparePlans": "Compare plans",

View File

@@ -1,6 +1,6 @@
{ {
"common": { "common": {
"appName": "SaaS-PDF", "appName": "Dociva",
"tagline": "Outils de fichiers en ligne gratuits", "tagline": "Outils de fichiers en ligne gratuits",
"upload": "Télécharger un fichier", "upload": "Télécharger un fichier",
"download": "Télécharger", "download": "Télécharger",
@@ -78,7 +78,7 @@
"thinking": "Réflexion en cours...", "thinking": "Réflexion en cours...",
"unavailable": "L'assistant est temporairement indisponible. Veuillez réessayer dans un instant.", "unavailable": "L'assistant est temporairement indisponible. Veuillez réessayer dans un instant.",
"close": "Fermer l'assistant", "close": "Fermer l'assistant",
"fabTitle": "Demander à SaaS-PDF", "fabTitle": "Demander à Dociva",
"fabSubtitle": "Aide intelligente sur tous les outils", "fabSubtitle": "Aide intelligente sur tous les outils",
"prompts": { "prompts": {
"currentTool": "Comment utiliser {{tool}} ?", "currentTool": "Comment utiliser {{tool}} ?",
@@ -155,10 +155,10 @@
}, },
"pages": { "pages": {
"about": { "about": {
"metaDescription": "Découvrez SaaS-PDF — outils en ligne gratuits, rapides et sécurisés pour les PDF, images, vidéos et textes. Aucune inscription requise.", "metaDescription": "Découvrez Dociva — outils en ligne gratuits, rapides et sécurisés pour les PDF, images, vidéos et textes. Aucune inscription requise.",
"title": "À propos de SaaS-PDF", "title": "À propos de Dociva",
"missionTitle": "Notre mission", "missionTitle": "Notre mission",
"missionText": "SaaS-PDF a été créé pour rendre les outils de fichiers professionnels accessibles à tous — gratuitement. Nous croyons que la conversion, la compression et l'édition de documents doivent être simples, rapides et privées. Pas d'inscription, pas de frais cachés, pas de logiciel à installer.", "missionText": "Dociva a été créé pour rendre les outils de fichiers professionnels accessibles à tous — gratuitement. Nous croyons que la conversion, la compression et l'édition de documents doivent être simples, rapides et privées. Pas d'inscription, pas de frais cachés, pas de logiciel à installer.",
"technologyTitle": "Technologie", "technologyTitle": "Technologie",
"technologyText": "Notre plateforme est alimentée par une infrastructure cloud moderne conçue pour la vitesse et la fiabilité. Les fichiers sont traités côté serveur à l'aide de bibliothèques open source de référence, garantissant des conversions précises et des résultats de haute qualité à chaque fois. Nos outils alimentés par l'IA exploitent des modèles d'apprentissage automatique avancés pour l'analyse, la traduction et le résumé intelligents de documents.", "technologyText": "Notre plateforme est alimentée par une infrastructure cloud moderne conçue pour la vitesse et la fiabilité. Les fichiers sont traités côté serveur à l'aide de bibliothèques open source de référence, garantissant des conversions précises et des résultats de haute qualité à chaque fois. Nos outils alimentés par l'IA exploitent des modèles d'apprentissage automatique avancés pour l'analyse, la traduction et le résumé intelligents de documents.",
"securityTitle": "Sécurité", "securityTitle": "Sécurité",
@@ -175,7 +175,7 @@
] ]
}, },
"contact": { "contact": {
"metaDescription": "Contactez l'équipe SaaS-PDF. Signalez un bug, demandez une fonctionnalité ou envoyez-nous un message.", "metaDescription": "Contactez l'équipe Dociva. Signalez un bug, demandez une fonctionnalité ou envoyez-nous un message.",
"title": "Nous contacter", "title": "Nous contacter",
"subtitle": "Vous avez une question, trouvé un bug ou souhaitez demander une fonctionnalité ? Nous serions ravis de vous entendre.", "subtitle": "Vous avez une question, trouvé un bug ou souhaitez demander une fonctionnalité ? Nous serions ravis de vous entendre.",
"formTitle": "Envoyez-nous un message", "formTitle": "Envoyez-nous un message",
@@ -196,7 +196,7 @@
"responseTime": "Nous répondons généralement sous 24 à 48 heures." "responseTime": "Nous répondons généralement sous 24 à 48 heures."
}, },
"privacy": { "privacy": {
"metaDescription": "Politique de confidentialité de SaaS-PDF. Découvrez comment nous gérons vos fichiers et données en toute transparence.", "metaDescription": "Politique de confidentialité de Dociva. Découvrez comment nous gérons vos fichiers et données en toute transparence.",
"title": "Politique de confidentialité", "title": "Politique de confidentialité",
"lastUpdated": "Dernière mise à jour : {{date}}", "lastUpdated": "Dernière mise à jour : {{date}}",
"dataCollectionTitle": "1. Collecte de données", "dataCollectionTitle": "1. Collecte de données",
@@ -226,13 +226,13 @@
"contactText": "Des questions sur cette politique ? Contactez-nous à" "contactText": "Des questions sur cette politique ? Contactez-nous à"
}, },
"terms": { "terms": {
"metaDescription": "Conditions d'utilisation de SaaS-PDF. Comprenez les règles et directives pour utiliser nos outils gratuits en ligne.", "metaDescription": "Conditions d'utilisation de Dociva. Comprenez les règles et directives pour utiliser nos outils gratuits en ligne.",
"title": "Conditions d'utilisation", "title": "Conditions d'utilisation",
"lastUpdated": "Dernière mise à jour : {{date}}", "lastUpdated": "Dernière mise à jour : {{date}}",
"acceptanceTitle": "1. Acceptation des conditions", "acceptanceTitle": "1. Acceptation des conditions",
"acceptanceText": "En accédant et en utilisant SaaS-PDF, vous acceptez d'être lié par ces conditions d'utilisation. Si vous n'êtes pas d'accord, veuillez cesser d'utiliser le service immédiatement.", "acceptanceText": "En accédant et en utilisant Dociva, vous acceptez d'être lié par ces conditions d'utilisation. Si vous n'êtes pas d'accord, veuillez cesser d'utiliser le service immédiatement.",
"serviceTitle": "2. Description du service", "serviceTitle": "2. Description du service",
"serviceText": "SaaS-PDF fournit des outils gratuits en ligne pour la conversion, la compression et la transformation de fichiers. Le service est fourni \"tel quel\" sans garantie d'aucune sorte.", "serviceText": "Dociva fournit des outils gratuits en ligne pour la conversion, la compression et la transformation de fichiers. Le service est fourni \"tel quel\" sans garantie d'aucune sorte.",
"useTitle": "3. Utilisation acceptable", "useTitle": "3. Utilisation acceptable",
"useItems": [ "useItems": [
"Vous ne pouvez télécharger que des fichiers que vous avez le droit de traiter.", "Vous ne pouvez télécharger que des fichiers que vous avez le droit de traiter.",
@@ -248,9 +248,9 @@
"Nous ne garantissons pas la préservation du contenu téléchargé au-delà de la fenêtre de traitement." "Nous ne garantissons pas la préservation du contenu téléchargé au-delà de la fenêtre de traitement."
], ],
"liabilityTitle": "5. Limitation de responsabilité", "liabilityTitle": "5. Limitation de responsabilité",
"liabilityText": "SaaS-PDF ne sera pas responsable des dommages directs, indirects, accessoires ou consécutifs résultant de l'utilisation ou de l'impossibilité d'utiliser le service. L'utilisation du service est à vos propres risques.", "liabilityText": "Dociva ne sera pas responsable des dommages directs, indirects, accessoires ou consécutifs résultant de l'utilisation ou de l'impossibilité d'utiliser le service. L'utilisation du service est à vos propres risques.",
"ipTitle": "6. Propriété intellectuelle", "ipTitle": "6. Propriété intellectuelle",
"ipText": "Tous les outils, interfaces et contenus de SaaS-PDF sont la propriété intellectuelle des opérateurs du service. Vous conservez la pleine propriété de tous les fichiers que vous téléchargez et traitez.", "ipText": "Tous les outils, interfaces et contenus de Dociva sont la propriété intellectuelle des opérateurs du service. Vous conservez la pleine propriété de tous les fichiers que vous téléchargez et traitez.",
"changesTitle": "7. Modifications des conditions", "changesTitle": "7. Modifications des conditions",
"changesText": "Nous nous réservons le droit de modifier ces conditions à tout moment. L'utilisation continue du service après les modifications constitue l'acceptation des conditions mises à jour.", "changesText": "Nous nous réservons le droit de modifier ces conditions à tout moment. L'utilisation continue du service après les modifications constitue l'acceptation des conditions mises à jour.",
"contactTitle": "8. Contact", "contactTitle": "8. Contact",
@@ -285,8 +285,8 @@
"totalRatings": "évaluations" "totalRatings": "évaluations"
}, },
"pricing": { "pricing": {
"metaTitle": "Tarifs — SaaS-PDF", "metaTitle": "Tarifs — Dociva",
"metaDescription": "Comparez les plans gratuit et pro de SaaS-PDF. Accédez à plus de 30 outils gratuitement ou passez au pro pour un traitement illimité.", "metaDescription": "Comparez les plans gratuit et pro de Dociva. Accédez à plus de 30 outils gratuitement ou passez au pro pour un traitement illimité.",
"title": "Plans & Tarifs", "title": "Plans & Tarifs",
"subtitle": "Commencez gratuitement et passez au pro quand vous en avez besoin.", "subtitle": "Commencez gratuitement et passez au pro quand vous en avez besoin.",
"free": "Gratuit", "free": "Gratuit",
@@ -338,9 +338,9 @@
"trustApiDesc": "Les espaces Pro peuvent générer des clés API et connecter les mêmes outils à des automatisations internes ou à des parcours clients." "trustApiDesc": "Les espaces Pro peuvent générer des clés API et connecter les mêmes outils à des automatisations internes ou à des parcours clients."
}, },
"developers": { "developers": {
"metaDescription": "Explorez le portail développeur SaaS-PDF, le flux API asynchrone et les endpoints prêts pour l'automatisation documentaire.", "metaDescription": "Explorez le portail développeur Dociva, le flux API asynchrone et les endpoints prêts pour l'automatisation documentaire.",
"badge": "Portail développeur", "badge": "Portail développeur",
"title": "Construisez des workflows documentaires sur l'API SaaS-PDF", "title": "Construisez des workflows documentaires sur l'API Dociva",
"subtitle": "Utilisez dans vos propres systèmes les mêmes endpoints de conversion, compression, OCR et IA que ceux de l'application web.", "subtitle": "Utilisez dans vos propres systèmes les mêmes endpoints de conversion, compression, OCR et IA que ceux de l'application web.",
"getApiKey": "Obtenir une clé API", "getApiKey": "Obtenir une clé API",
"comparePlans": "Comparer les forfaits", "comparePlans": "Comparer les forfaits",

View File

@@ -6,7 +6,7 @@ import SEOHead from '@/components/seo/SEOHead';
import { generateWebPage } from '@/utils/seo'; import { generateWebPage } from '@/utils/seo';
import axios from 'axios'; import axios from 'axios';
const CONTACT_EMAIL = 'support@saas-pdf.com'; const CONTACT_EMAIL = 'support@dociva.io';
const API_BASE = import.meta.env.VITE_API_URL || ''; const API_BASE = import.meta.env.VITE_API_URL || '';
type Category = 'general' | 'bug' | 'feature'; type Category = 'general' | 'bug' | 'feature';

View File

@@ -239,7 +239,7 @@ export default function InternalAdminPage() {
return ( return (
<div className="mx-auto max-w-7xl space-y-8"> <div className="mx-auto max-w-7xl space-y-8">
<Helmet> <Helmet>
<title>Internal Admin | SaaS PDF</title> <title>Internal Admin | Dociva</title>
<meta name="robots" content="noindex,nofollow" /> <meta name="robots" content="noindex,nofollow" />
</Helmet> </Helmet>

View File

@@ -65,11 +65,11 @@ export default function PricingPage() {
<> <>
<SEOHead <SEOHead
title={t('pages.pricing.title', 'Pricing')} title={t('pages.pricing.title', 'Pricing')}
description={t('pages.pricing.metaDescription', 'Compare Free and Pro plans for SaaS-PDF. Get more file processing power, API access, and priority support.')} description={t('pages.pricing.metaDescription', 'Compare Free and Pro plans for Dociva. Get more file processing power, API access, and priority support.')}
path="/pricing" path="/pricing"
jsonLd={generateWebPage({ jsonLd={generateWebPage({
name: t('pages.pricing.title', 'Pricing'), name: t('pages.pricing.title', 'Pricing'),
description: t('pages.pricing.metaDescription', 'Compare Free and Pro plans for SaaS-PDF.'), description: t('pages.pricing.metaDescription', 'Compare Free and Pro plans for Dociva.'),
url: `${window.location.origin}/pricing`, url: `${window.location.origin}/pricing`,
})} })}
/> />

View File

@@ -4,7 +4,7 @@ import { generateWebPage } from '@/utils/seo';
import { FILE_RETENTION_MINUTES } from '@/config/toolLimits'; import { FILE_RETENTION_MINUTES } from '@/config/toolLimits';
const LAST_UPDATED = '2026-03-06'; const LAST_UPDATED = '2026-03-06';
const CONTACT_EMAIL = 'support@saas-pdf.com'; const CONTACT_EMAIL = 'support@dociva.io';
export default function PrivacyPage() { export default function PrivacyPage() {
const { t } = useTranslation(); const { t } = useTranslation();

View File

@@ -4,7 +4,7 @@ import { generateWebPage } from '@/utils/seo';
import { FILE_RETENTION_MINUTES } from '@/config/toolLimits'; import { FILE_RETENTION_MINUTES } from '@/config/toolLimits';
const LAST_UPDATED = '2026-03-06'; const LAST_UPDATED = '2026-03-06';
const CONTACT_EMAIL = 'support@saas-pdf.com'; const CONTACT_EMAIL = 'support@dociva.io';
export default function TermsPage() { export default function TermsPage() {
const { t } = useTranslation(); const { t } = useTranslation();

View File

@@ -1,4 +1,4 @@
export const RATING_PROMPT_EVENT = 'saaspdf:rating-prompt'; export const RATING_PROMPT_EVENT = 'dociva:rating-prompt';
interface RatingPromptOptions { interface RatingPromptOptions {
forceOpen?: boolean; forceOpen?: boolean;

View File

@@ -120,13 +120,13 @@ export function generateOrganization(origin: string): object {
return { return {
'@context': 'https://schema.org', '@context': 'https://schema.org',
'@type': 'Organization', '@type': 'Organization',
name: 'SaaS-PDF', name: 'Dociva',
url: origin, url: origin,
logo: `${origin}/favicon.svg`, logo: `${origin}/favicon.svg`,
sameAs: [], sameAs: [],
contactPoint: { contactPoint: {
'@type': 'ContactPoint', '@type': 'ContactPoint',
email: 'support@saas-pdf.com', email: 'support@dociva.io',
contactType: 'customer support', contactType: 'customer support',
availableLanguage: ['English', 'Arabic', 'French'], availableLanguage: ['English', 'Arabic', 'French'],
}, },
@@ -149,7 +149,7 @@ export function generateWebPage(page: {
url: page.url, url: page.url,
isPartOf: { isPartOf: {
'@type': 'WebSite', '@type': 'WebSite',
name: 'SaaS-PDF', name: 'Dociva',
}, },
}; };
} }
@@ -172,11 +172,11 @@ export function generateBlogPosting(post: {
inLanguage: post.inLanguage, inLanguage: post.inLanguage,
author: { author: {
'@type': 'Organization', '@type': 'Organization',
name: 'SaaS-PDF', name: 'Dociva',
}, },
publisher: { publisher: {
'@type': 'Organization', '@type': 'Organization',
name: 'SaaS-PDF', name: 'Dociva',
}, },
mainEntityOfPage: post.url, mainEntityOfPage: post.url,
}; };

View File

@@ -4,16 +4,29 @@ upstream backend {
server { server {
listen 80; listen 80;
server_name _; server_name dociva.io www.dociva.io;
client_max_body_size 100M; client_max_body_size 100M;
# Redirect HTTP to HTTPS # Redirect HTTP to HTTPS
return 301 https://$host$request_uri; return 301 https://dociva.io$request_uri;
}
# Redirect www to non-www
server {
listen 443 ssl http2;
server_name www.dociva.io;
client_max_body_size 100M;
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
return 301 https://dociva.io$request_uri;
} }
server { server {
listen 443 ssl http2; listen 443 ssl http2;
server_name _; server_name dociva.io;
client_max_body_size 100M; client_max_body_size 100M;
# SSL certificates (mount via certbot / Let's Encrypt) # SSL certificates (mount via certbot / Let's Encrypt)

View File

@@ -1,9 +1,9 @@
#!/bin/bash #!/bin/bash
# deploy.sh — Production deployment script for SaaS-PDF # deploy.sh — Production deployment script for Dociva
set -euo pipefail set -euo pipefail
echo "=========================================" echo "========================================="
echo " SaaS-PDF Production Deployment" echo " Dociva Production Deployment"
echo "=========================================" echo "========================================="
# Colors # Colors

View File

@@ -4,8 +4,8 @@ generate_sitemap.py
Generates sitemap.xml for SEO from the full route inventory. Generates sitemap.xml for SEO from the full route inventory.
Usage: Usage:
python scripts/generate_sitemap.py --domain https://saas-pdf.com python scripts/generate_sitemap.py --domain https://dociva.io
python scripts/generate_sitemap.py --domain https://saas-pdf.com --output frontend/public/sitemap.xml python scripts/generate_sitemap.py --domain https://dociva.io --output frontend/public/sitemap.xml
# Or set SITE_DOMAIN env var and omit --domain # Or set SITE_DOMAIN env var and omit --domain
""" """
@@ -130,7 +130,7 @@ def generate_sitemap(domain: str) -> str:
def main(): def main():
parser = argparse.ArgumentParser(description='Generate sitemap.xml') parser = argparse.ArgumentParser(description='Generate sitemap.xml')
parser.add_argument('--domain', type=str, default=os.environ.get('SITE_DOMAIN', ''), parser.add_argument('--domain', type=str, default=os.environ.get('SITE_DOMAIN', ''),
help='Site domain (e.g. https://saas-pdf.com). Falls back to SITE_DOMAIN env var.') help='Site domain (e.g. https://dociva.io). Falls back to SITE_DOMAIN env var.')
parser.add_argument('--output', type=str, default='frontend/public/sitemap.xml', help='Output file path') parser.add_argument('--output', type=str, default='frontend/public/sitemap.xml', help='Output file path')
args = parser.parse_args() args = parser.parse_args()