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:
@@ -5,7 +5,7 @@ SECRET_KEY=change-me-in-production
|
||||
INTERNAL_ADMIN_EMAILS=admin@example.com
|
||||
|
||||
# Site Domain (used in sitemap, robots.txt, emails)
|
||||
SITE_DOMAIN=https://saas-pdf.com
|
||||
SITE_DOMAIN=https://dociva.io
|
||||
|
||||
# Redis
|
||||
REDIS_URL=redis://redis:6379/0
|
||||
@@ -22,7 +22,7 @@ OPENROUTER_BASE_URL=https://openrouter.ai/api/v1/chat/completions
|
||||
# AWS S3
|
||||
AWS_ACCESS_KEY_ID=your-access-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
|
||||
|
||||
# File Processing
|
||||
@@ -30,7 +30,7 @@ MAX_CONTENT_LENGTH_MB=50
|
||||
UPLOAD_FOLDER=/tmp/uploads
|
||||
OUTPUT_FOLDER=/tmp/outputs
|
||||
FILE_EXPIRY_SECONDS=1800
|
||||
DATABASE_PATH=/app/data/saas_pdf.db
|
||||
DATABASE_PATH=/app/data/dociva.db
|
||||
|
||||
# CORS
|
||||
CORS_ORIGINS=http://localhost:5173,http://localhost:3000
|
||||
@@ -49,7 +49,7 @@ SENTRY_ENVIRONMENT=development
|
||||
DATABASE_URL=
|
||||
|
||||
# Frontend
|
||||
VITE_SITE_DOMAIN=https://saas-pdf.com
|
||||
VITE_SITE_DOMAIN=https://dociva.io
|
||||
VITE_SENTRY_DSN=
|
||||
|
||||
# Frontend Analytics / Ads (Vite)
|
||||
|
||||
4
.gitignore
vendored
4
.gitignore
vendored
@@ -53,3 +53,7 @@ logs/
|
||||
htmlcov/
|
||||
.coverage
|
||||
coverage/
|
||||
|
||||
# Celery
|
||||
celerybeat-schedule
|
||||
backend/celerybeat-schedule
|
||||
@@ -1,4 +1,4 @@
|
||||
# Contributing to SaaS-PDF
|
||||
# Contributing to Dociva
|
||||
|
||||
## Safety Rules
|
||||
|
||||
|
||||
10
README.md
10
README.md
@@ -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)
|
||||
|
||||
@@ -65,7 +67,7 @@ docker-compose up --build
|
||||
- Session-backed authentication via `/api/auth/*`
|
||||
- Free account creation with email + password
|
||||
- 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
|
||||
|
||||
@@ -80,7 +82,7 @@ docker-compose up --build
|
||||
## 📁 Project Structure
|
||||
|
||||
```
|
||||
SaaS-PDF/
|
||||
Dociva/
|
||||
├── backend/ # Flask API + Celery Workers
|
||||
├── frontend/ # React + Vite + TypeScript
|
||||
├── nginx/ # Reverse proxy configuration
|
||||
|
||||
@@ -9,6 +9,6 @@ def health_check():
|
||||
"""Simple health check — returns 200 if the service is running."""
|
||||
return jsonify({
|
||||
"status": "healthy",
|
||||
"service": "SaaS-PDF API",
|
||||
"service": "Dociva API",
|
||||
"version": "1.0.0",
|
||||
})
|
||||
|
||||
@@ -63,11 +63,11 @@ def save_message(name: str, email: str, category: str, subject: str, message: st
|
||||
conn.close()
|
||||
|
||||
# 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:
|
||||
send_email(
|
||||
to=admin_email,
|
||||
subject=f"[SaaS-PDF Contact] [{category}] {subject}",
|
||||
subject=f"[Dociva Contact] [{category}] {subject}",
|
||||
html_body=f"""
|
||||
<h2>New Contact Message</h2>
|
||||
<p><strong>From:</strong> {name} <{email}></p>
|
||||
|
||||
@@ -16,7 +16,7 @@ def _get_smtp_config() -> dict:
|
||||
"port": current_app.config.get("SMTP_PORT", 587),
|
||||
"user": current_app.config.get("SMTP_USER", ""),
|
||||
"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),
|
||||
}
|
||||
|
||||
@@ -62,11 +62,11 @@ def send_password_reset_email(to: str, token: str) -> bool:
|
||||
html = f"""
|
||||
<div style="font-family: sans-serif; max-width: 480px; margin: auto;">
|
||||
<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;">
|
||||
Reset Password
|
||||
</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>
|
||||
</div>
|
||||
"""
|
||||
return send_email(to, "Reset your SaaS-PDF password", html)
|
||||
return send_email(to, "Reset your Dociva password", html)
|
||||
|
||||
@@ -52,7 +52,7 @@ TOOL_CATALOG = [
|
||||
{"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.
|
||||
Rules:
|
||||
- Reply in the same language as the user.
|
||||
|
||||
Binary file not shown.
@@ -29,7 +29,7 @@ class BaseConfig:
|
||||
OUTPUT_FOLDER = os.getenv("OUTPUT_FOLDER", "/tmp/outputs")
|
||||
FILE_EXPIRY_SECONDS = int(os.getenv("FILE_EXPIRY_SECONDS", 1800))
|
||||
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)
|
||||
SESSION_COOKIE_HTTPONLY = True
|
||||
@@ -94,7 +94,7 @@ class BaseConfig:
|
||||
# AWS S3
|
||||
AWS_ACCESS_KEY_ID = os.getenv("AWS_ACCESS_KEY_ID")
|
||||
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")
|
||||
|
||||
# CORS
|
||||
@@ -116,7 +116,7 @@ class BaseConfig:
|
||||
SMTP_PORT = int(os.getenv("SMTP_PORT", 587))
|
||||
SMTP_USER = os.getenv("SMTP_USER", "")
|
||||
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"
|
||||
FRONTEND_URL = os.getenv("FRONTEND_URL", "http://localhost:5173")
|
||||
|
||||
@@ -131,7 +131,7 @@ class BaseConfig:
|
||||
SENTRY_ENVIRONMENT = os.getenv("SENTRY_ENVIRONMENT", "development")
|
||||
|
||||
# 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
|
||||
DATABASE_URL = os.getenv("DATABASE_URL", "")
|
||||
@@ -153,6 +153,7 @@ class ProductionConfig(BaseConfig):
|
||||
DEBUG = False
|
||||
TESTING = False
|
||||
SESSION_COOKIE_SECURE = True
|
||||
SESSION_COOKIE_SAMESITE = "Lax"
|
||||
# Stricter rate limits in production
|
||||
RATELIMIT_DEFAULT = "60/hour"
|
||||
|
||||
@@ -163,7 +164,7 @@ class TestingConfig(BaseConfig):
|
||||
TESTING = True
|
||||
UPLOAD_FOLDER = "/tmp/test_uploads"
|
||||
OUTPUT_FOLDER = "/tmp/test_outputs"
|
||||
DATABASE_PATH = "/tmp/test_saas_pdf.db"
|
||||
DATABASE_PATH = "/tmp/test_dociva.db"
|
||||
FEATURE_EDITOR = False
|
||||
FEATURE_OCR = False
|
||||
FEATURE_REMOVEBG = False
|
||||
|
||||
@@ -17,8 +17,8 @@ from app.services.stripe_service import init_stripe_db
|
||||
def app():
|
||||
"""Create application for testing."""
|
||||
os.environ['FLASK_ENV'] = 'testing'
|
||||
test_root = tempfile.mkdtemp(prefix='saas-pdf-tests-')
|
||||
db_path = os.path.join(test_root, 'test_saas_pdf.db')
|
||||
test_root = tempfile.mkdtemp(prefix='dociva-tests-')
|
||||
db_path = os.path.join(test_root, 'test_dociva.db')
|
||||
upload_folder = os.path.join(test_root, 'uploads')
|
||||
output_folder = os.path.join(test_root, 'outputs')
|
||||
os.environ['DATABASE_PATH'] = db_path
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# خطة رفع SaaS-PDF إلى مستوى المنافسة
|
||||
# خطة رفع Dociva إلى مستوى المنافسة
|
||||
|
||||
## Summary
|
||||
- اعتماد مسار نمو واضح: `B2C SEO-first` أولاً، ثم `Freemium monetization`، ثم `B2B API expansion`.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -37,7 +37,7 @@ VITE_GA_MEASUREMENT_ID=G-XXXXXXXXXX
|
||||
### Plausible (Privacy-Friendly Alternative)
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
@@ -127,7 +127,7 @@ All text is i18n-driven from `seo.{toolKey}.*` keys in EN/AR/FR.
|
||||
- "كيفية دمج ملفات PDF" (Arabic equivalent)
|
||||
- "comment fusionner des fichiers PDF" (French equivalent)
|
||||
- [ ] 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:**
|
||||
- Target 200–500 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 |
|
||||
| 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)
|
||||
2. **No signup** — zero friction, instant file processing
|
||||
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
|
||||
|
||||
# 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
|
||||
|
||||
# Google Search Console verification (optional)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# SaaS-PDF — Tool Inventory & Competitive Gap Analysis
|
||||
# Dociva — Tool Inventory & Competitive Gap Analysis
|
||||
|
||||
> Generated: March 7, 2026
|
||||
> Branch: `feature/critical-maintenance-and-editor`
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
VITE_SITE_DOMAIN=https://saas-pdf.com
|
||||
VITE_SITE_DOMAIN=https://dociva.io
|
||||
VITE_SENTRY_DSN=
|
||||
VITE_GA_MEASUREMENT_ID=G-XXXXXXXXXX
|
||||
VITE_PLAUSIBLE_DOMAIN=
|
||||
|
||||
@@ -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).
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
## 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
|
||||
|
||||
@@ -506,7 +506,7 @@ Used via classes: `.progress-bar-animated`, `.animate-in`
|
||||
### 9.1 Directory Layout
|
||||
|
||||
```
|
||||
SaaS-PDF/
|
||||
Dociva/
|
||||
├── frontend/ # React SPA
|
||||
│ ├── src/
|
||||
│ │ ├── components/ # UI Components (layout/, shared/, tools/)
|
||||
|
||||
@@ -6,24 +6,24 @@
|
||||
<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="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 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:site_name" content="SaaS-PDF" />
|
||||
<meta property="og:site_name" content="Dociva" />
|
||||
<meta property="og:locale" content="en_US" />
|
||||
<meta property="og:locale:alternate" content="ar_SA" />
|
||||
<meta property="og:locale:alternate" content="fr_FR" />
|
||||
<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." />
|
||||
<link rel="dns-prefetch" href="https://fonts.googleapis.com" />
|
||||
<link rel="dns-prefetch" href="https://fonts.gstatic.com" />
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||
<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" />
|
||||
<title>SaaS-PDF — Free Online File Tools</title>
|
||||
<title>Dociva — Free Online File Tools</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
|
||||
6
frontend/package-lock.json
generated
6
frontend/package-lock.json
generated
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"name": "saas-pdf-frontend",
|
||||
{
|
||||
"name": "dociva-frontend",
|
||||
"version": "1.0.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "saas-pdf-frontend",
|
||||
"name": "dociva-frontend",
|
||||
"version": "1.0.0",
|
||||
"dependencies": {
|
||||
"axios": "^1.7.0",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"name": "saas-pdf-frontend",
|
||||
"name": "dociva-frontend",
|
||||
"private": true,
|
||||
"version": "1.0.0",
|
||||
"type": "module",
|
||||
|
||||
@@ -1,7 +1,17 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" fill="none">
|
||||
<rect width="64" height="64" rx="14" fill="#4F46E5"/>
|
||||
<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"/>
|
||||
<path d="M22 28h12M22 33h8" stroke="#fff" stroke-width="2" stroke-linecap="round"/>
|
||||
<path d="M42 24l6-6M48 18v6h-6" stroke="#93C5FD" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M42 40l6 6M48 46v-6h-6" stroke="#93C5FD" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<!-- Background: rounded square with gradient -->
|
||||
<defs>
|
||||
<linearGradient id="bg" x1="0" y1="0" x2="64" y2="64" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0%" stop-color="#4F46E5"/>
|
||||
<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>
|
||||
|
||||
|
Before Width: | Height: | Size: 596 B After Width: | Height: | Size: 957 B |
@@ -1,5 +1,5 @@
|
||||
/* TEAM */
|
||||
Project: SaaS-PDF
|
||||
Project: Dociva
|
||||
Role: Full-Stack Development
|
||||
Technology: React, TypeScript, Python, Flask, Celery
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# SaaS-PDF — llms.txt
|
||||
# Dociva — llms.txt
|
||||
# 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 —
|
||||
> directly in the browser with no signup required.
|
||||
|
||||
|
||||
16
frontend/public/logo.svg
Normal file
16
frontend/public/logo.svg
Normal 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 |
@@ -1,4 +1,4 @@
|
||||
# robots.txt — SaaS-PDF
|
||||
# robots.txt — Dociva
|
||||
User-agent: *
|
||||
Allow: /
|
||||
Disallow: /api/
|
||||
@@ -7,7 +7,7 @@ Disallow: /forgot-password
|
||||
Disallow: /reset-password
|
||||
|
||||
# Sitemaps
|
||||
Sitemap: https://saas-pdf.com/sitemap.xml
|
||||
Sitemap: https://dociva.io/sitemap.xml
|
||||
|
||||
# AI/LLM discoverability
|
||||
# See also: /llms.txt
|
||||
|
||||
@@ -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">
|
||||
<url>
|
||||
<loc>https://saas-pdf.com/</loc>
|
||||
<loc>https://dociva.io/</loc>
|
||||
<lastmod>2026-03-14</lastmod>
|
||||
<changefreq>daily</changefreq>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://saas-pdf.com/about</loc>
|
||||
<loc>https://dociva.io/about</loc>
|
||||
<lastmod>2026-03-14</lastmod>
|
||||
<changefreq>monthly</changefreq>
|
||||
<priority>0.4</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://saas-pdf.com/contact</loc>
|
||||
<loc>https://dociva.io/contact</loc>
|
||||
<lastmod>2026-03-14</lastmod>
|
||||
<changefreq>monthly</changefreq>
|
||||
<priority>0.4</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://saas-pdf.com/privacy</loc>
|
||||
<loc>https://dociva.io/privacy</loc>
|
||||
<lastmod>2026-03-14</lastmod>
|
||||
<changefreq>yearly</changefreq>
|
||||
<priority>0.3</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://saas-pdf.com/terms</loc>
|
||||
<loc>https://dociva.io/terms</loc>
|
||||
<lastmod>2026-03-14</lastmod>
|
||||
<changefreq>yearly</changefreq>
|
||||
<priority>0.3</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://saas-pdf.com/pricing</loc>
|
||||
<loc>https://dociva.io/pricing</loc>
|
||||
<lastmod>2026-03-14</lastmod>
|
||||
<changefreq>monthly</changefreq>
|
||||
<priority>0.7</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://saas-pdf.com/blog</loc>
|
||||
<loc>https://dociva.io/blog</loc>
|
||||
<lastmod>2026-03-14</lastmod>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>0.6</priority>
|
||||
@@ -45,109 +45,109 @@
|
||||
|
||||
<!-- PDF Tools -->
|
||||
<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>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>0.9</priority>
|
||||
</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>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>0.9</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://saas-pdf.com/tools/compress-pdf</loc>
|
||||
<loc>https://dociva.io/tools/compress-pdf</loc>
|
||||
<lastmod>2026-03-14</lastmod>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>0.9</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://saas-pdf.com/tools/merge-pdf</loc>
|
||||
<loc>https://dociva.io/tools/merge-pdf</loc>
|
||||
<lastmod>2026-03-14</lastmod>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>0.9</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://saas-pdf.com/tools/split-pdf</loc>
|
||||
<loc>https://dociva.io/tools/split-pdf</loc>
|
||||
<lastmod>2026-03-14</lastmod>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>0.8</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://saas-pdf.com/tools/rotate-pdf</loc>
|
||||
<loc>https://dociva.io/tools/rotate-pdf</loc>
|
||||
<lastmod>2026-03-14</lastmod>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>0.7</priority>
|
||||
</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>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>0.8</priority>
|
||||
</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>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>0.8</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://saas-pdf.com/tools/watermark-pdf</loc>
|
||||
<loc>https://dociva.io/tools/watermark-pdf</loc>
|
||||
<lastmod>2026-03-14</lastmod>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>0.7</priority>
|
||||
</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>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>0.7</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://saas-pdf.com/tools/protect-pdf</loc>
|
||||
<loc>https://dociva.io/tools/protect-pdf</loc>
|
||||
<lastmod>2026-03-14</lastmod>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>0.8</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://saas-pdf.com/tools/unlock-pdf</loc>
|
||||
<loc>https://dociva.io/tools/unlock-pdf</loc>
|
||||
<lastmod>2026-03-14</lastmod>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>0.8</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://saas-pdf.com/tools/page-numbers</loc>
|
||||
<loc>https://dociva.io/tools/page-numbers</loc>
|
||||
<lastmod>2026-03-14</lastmod>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>0.7</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://saas-pdf.com/tools/reorder-pdf</loc>
|
||||
<loc>https://dociva.io/tools/reorder-pdf</loc>
|
||||
<lastmod>2026-03-14</lastmod>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>0.7</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://saas-pdf.com/tools/extract-pages</loc>
|
||||
<loc>https://dociva.io/tools/extract-pages</loc>
|
||||
<lastmod>2026-03-14</lastmod>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>0.7</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://saas-pdf.com/tools/pdf-editor</loc>
|
||||
<loc>https://dociva.io/tools/pdf-editor</loc>
|
||||
<lastmod>2026-03-14</lastmod>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>0.8</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://saas-pdf.com/tools/pdf-flowchart</loc>
|
||||
<loc>https://dociva.io/tools/pdf-flowchart</loc>
|
||||
<lastmod>2026-03-14</lastmod>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>0.7</priority>
|
||||
</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>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>0.8</priority>
|
||||
@@ -155,25 +155,25 @@
|
||||
|
||||
<!-- Image Tools -->
|
||||
<url>
|
||||
<loc>https://saas-pdf.com/tools/image-converter</loc>
|
||||
<loc>https://dociva.io/tools/image-converter</loc>
|
||||
<lastmod>2026-03-14</lastmod>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>0.8</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://saas-pdf.com/tools/image-resize</loc>
|
||||
<loc>https://dociva.io/tools/image-resize</loc>
|
||||
<lastmod>2026-03-14</lastmod>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>0.8</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://saas-pdf.com/tools/compress-image</loc>
|
||||
<loc>https://dociva.io/tools/compress-image</loc>
|
||||
<lastmod>2026-03-14</lastmod>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>0.8</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://saas-pdf.com/tools/remove-background</loc>
|
||||
<loc>https://dociva.io/tools/remove-background</loc>
|
||||
<lastmod>2026-03-14</lastmod>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>0.8</priority>
|
||||
@@ -181,31 +181,31 @@
|
||||
|
||||
<!-- AI Tools -->
|
||||
<url>
|
||||
<loc>https://saas-pdf.com/tools/ocr</loc>
|
||||
<loc>https://dociva.io/tools/ocr</loc>
|
||||
<lastmod>2026-03-14</lastmod>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>0.8</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://saas-pdf.com/tools/chat-pdf</loc>
|
||||
<loc>https://dociva.io/tools/chat-pdf</loc>
|
||||
<lastmod>2026-03-14</lastmod>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>0.8</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://saas-pdf.com/tools/summarize-pdf</loc>
|
||||
<loc>https://dociva.io/tools/summarize-pdf</loc>
|
||||
<lastmod>2026-03-14</lastmod>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>0.8</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://saas-pdf.com/tools/translate-pdf</loc>
|
||||
<loc>https://dociva.io/tools/translate-pdf</loc>
|
||||
<lastmod>2026-03-14</lastmod>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>0.8</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://saas-pdf.com/tools/extract-tables</loc>
|
||||
<loc>https://dociva.io/tools/extract-tables</loc>
|
||||
<lastmod>2026-03-14</lastmod>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>0.8</priority>
|
||||
@@ -213,31 +213,31 @@
|
||||
|
||||
<!-- Utility Tools -->
|
||||
<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>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>0.7</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://saas-pdf.com/tools/qr-code</loc>
|
||||
<loc>https://dociva.io/tools/qr-code</loc>
|
||||
<lastmod>2026-03-14</lastmod>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>0.7</priority>
|
||||
</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>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>0.7</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://saas-pdf.com/tools/word-counter</loc>
|
||||
<loc>https://dociva.io/tools/word-counter</loc>
|
||||
<lastmod>2026-03-14</lastmod>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>0.6</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://saas-pdf.com/tools/text-cleaner</loc>
|
||||
<loc>https://dociva.io/tools/text-cleaner</loc>
|
||||
<lastmod>2026-03-14</lastmod>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>0.6</priority>
|
||||
|
||||
@@ -19,7 +19,7 @@ interface AssistantStorageState {
|
||||
messages: AssistantMessage[];
|
||||
}
|
||||
|
||||
const STORAGE_KEY = 'saaspdf:site-assistant:v1';
|
||||
const STORAGE_KEY = 'dociva:site-assistant:v1';
|
||||
const MAX_STORED_MESSAGES = 20;
|
||||
const ASSISTANT_ENABLED = import.meta.env.VITE_SITE_ASSISTANT_ENABLED !== 'false';
|
||||
|
||||
|
||||
@@ -2,10 +2,10 @@ import { Helmet } from 'react-helmet-async';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { buildLanguageAlternates, getOgLocale } from '@/utils/seo';
|
||||
|
||||
const SITE_NAME = 'SaaS-PDF';
|
||||
const SITE_NAME = 'Dociva';
|
||||
|
||||
interface SEOHeadProps {
|
||||
/** Page title (will be appended with " — SaaS-PDF") */
|
||||
/** Page title (will be appended with " — Dociva") */
|
||||
title: string;
|
||||
/** Meta description */
|
||||
description: string;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
{
|
||||
"common": {
|
||||
"appName": "SaaS-PDF",
|
||||
"appName": "Dociva",
|
||||
"tagline": "أدوات ملفات مجانية على الإنترنت",
|
||||
"upload": "رفع ملف",
|
||||
"download": "تحميل",
|
||||
@@ -78,7 +78,7 @@
|
||||
"thinking": "جارٍ التفكير...",
|
||||
"unavailable": "المساعد غير متاح مؤقتاً. يرجى المحاولة بعد قليل.",
|
||||
"close": "إغلاق المساعد",
|
||||
"fabTitle": "اسأل SaaS-PDF",
|
||||
"fabTitle": "اسأل Dociva",
|
||||
"fabSubtitle": "مساعدة ذكية عبر جميع الأدوات",
|
||||
"prompts": {
|
||||
"currentTool": "كيف أستخدم {{tool}}؟",
|
||||
@@ -155,10 +155,10 @@
|
||||
},
|
||||
"pages": {
|
||||
"about": {
|
||||
"metaDescription": "تعرّف على SaaS-PDF — أدوات ملفات مجانية وسريعة وآمنة عبر الإنترنت لملفات PDF والصور والفيديو والنصوص. لا حاجة للتسجيل.",
|
||||
"title": "عن SaaS-PDF",
|
||||
"metaDescription": "تعرّف على Dociva — أدوات ملفات مجانية وسريعة وآمنة عبر الإنترنت لملفات PDF والصور والفيديو والنصوص. لا حاجة للتسجيل.",
|
||||
"title": "عن Dociva",
|
||||
"missionTitle": "مهمتنا",
|
||||
"missionText": "تم بناء SaaS-PDF لجعل أدوات الملفات الاحترافية متاحة للجميع — مجاناً. نؤمن بأن تحويل المستندات وضغطها وتعديلها يجب أن يكون بسيطاً وسريعاً وخاصاً. لا تسجيل، لا رسوم خفية، لا برامج للتثبيت.",
|
||||
"missionText": "تم بناء Dociva لجعل أدوات الملفات الاحترافية متاحة للجميع — مجاناً. نؤمن بأن تحويل المستندات وضغطها وتعديلها يجب أن يكون بسيطاً وسريعاً وخاصاً. لا تسجيل، لا رسوم خفية، لا برامج للتثبيت.",
|
||||
"technologyTitle": "التقنية",
|
||||
"technologyText": "منصتنا مدعومة ببنية تحتية سحابية حديثة مصممة للسرعة والموثوقية. تتم معالجة الملفات على الخادم باستخدام مكتبات مفتوحة المصدر رائدة في الصناعة، مما يضمن تحويلات دقيقة ومخرجات عالية الجودة في كل مرة. تستفيد أدواتنا المدعومة بالذكاء الاصطناعي من نماذج التعلم الآلي المتقدمة لتحليل المستندات والترجمة والتلخيص بذكاء.",
|
||||
"securityTitle": "الأمان",
|
||||
@@ -175,7 +175,7 @@
|
||||
]
|
||||
},
|
||||
"contact": {
|
||||
"metaDescription": "تواصل مع فريق SaaS-PDF. أبلغ عن خطأ أو اطلب ميزة جديدة أو أرسل لنا رسالة.",
|
||||
"metaDescription": "تواصل مع فريق Dociva. أبلغ عن خطأ أو اطلب ميزة جديدة أو أرسل لنا رسالة.",
|
||||
"title": "اتصل بنا",
|
||||
"subtitle": "لديك سؤال أو وجدت خطأ أو تريد طلب ميزة جديدة؟ يسعدنا سماع رأيك.",
|
||||
"formTitle": "أرسل لنا رسالة",
|
||||
@@ -196,7 +196,7 @@
|
||||
"responseTime": "نرد عادةً خلال 24-48 ساعة."
|
||||
},
|
||||
"privacy": {
|
||||
"metaDescription": "سياسة الخصوصية لـ SaaS-PDF. تعرّف على كيفية تعاملنا مع ملفاتك وبياناتك بشفافية كاملة.",
|
||||
"metaDescription": "سياسة الخصوصية لـ Dociva. تعرّف على كيفية تعاملنا مع ملفاتك وبياناتك بشفافية كاملة.",
|
||||
"title": "سياسة الخصوصية",
|
||||
"lastUpdated": "آخر تحديث: {{date}}",
|
||||
"dataCollectionTitle": "1. جمع البيانات",
|
||||
@@ -226,13 +226,13 @@
|
||||
"contactText": "أسئلة حول هذه السياسة؟ تواصل معنا على"
|
||||
},
|
||||
"terms": {
|
||||
"metaDescription": "شروط استخدام SaaS-PDF. تعرّف على القواعد والإرشادات لاستخدام أدواتنا المجانية عبر الإنترنت.",
|
||||
"metaDescription": "شروط استخدام Dociva. تعرّف على القواعد والإرشادات لاستخدام أدواتنا المجانية عبر الإنترنت.",
|
||||
"title": "شروط الاستخدام",
|
||||
"lastUpdated": "آخر تحديث: {{date}}",
|
||||
"acceptanceTitle": "1. قبول الشروط",
|
||||
"acceptanceText": "باستخدامك لموقع SaaS-PDF، فإنك توافق على الالتزام بشروط الاستخدام هذه. إذا كنت لا توافق، يرجى التوقف عن الاستخدام فوراً.",
|
||||
"acceptanceText": "باستخدامك لموقع Dociva، فإنك توافق على الالتزام بشروط الاستخدام هذه. إذا كنت لا توافق، يرجى التوقف عن الاستخدام فوراً.",
|
||||
"serviceTitle": "2. وصف الخدمة",
|
||||
"serviceText": "يوفر SaaS-PDF أدوات مجانية عبر الإنترنت لتحويل الملفات وضغطها ومعالجتها. يتم تقديم الخدمة \"كما هي\" بدون ضمانات من أي نوع.",
|
||||
"serviceText": "يوفر Dociva أدوات مجانية عبر الإنترنت لتحويل الملفات وضغطها ومعالجتها. يتم تقديم الخدمة \"كما هي\" بدون ضمانات من أي نوع.",
|
||||
"useTitle": "3. الاستخدام المقبول",
|
||||
"useItems": [
|
||||
"يجب أن ترفع فقط ملفات لديك الحق في معالجتها.",
|
||||
@@ -248,9 +248,9 @@
|
||||
"لا نضمن الحفاظ على أي محتوى مرفوع بعد فترة المعالجة."
|
||||
],
|
||||
"liabilityTitle": "5. تحديد المسؤولية",
|
||||
"liabilityText": "لن يكون SaaS-PDF مسؤولاً عن أي أضرار مباشرة أو غير مباشرة أو عرضية أو تبعية ناتجة عن استخدام الخدمة أو عدم القدرة على استخدامها. استخدام الخدمة على مسؤوليتك.",
|
||||
"liabilityText": "لن يكون Dociva مسؤولاً عن أي أضرار مباشرة أو غير مباشرة أو عرضية أو تبعية ناتجة عن استخدام الخدمة أو عدم القدرة على استخدامها. استخدام الخدمة على مسؤوليتك.",
|
||||
"ipTitle": "6. الملكية الفكرية",
|
||||
"ipText": "جميع الأدوات والواجهات والمحتوى على SaaS-PDF هي ملكية فكرية لمشغلي الخدمة. تحتفظ بملكية كاملة لجميع الملفات التي ترفعها وتعالجها.",
|
||||
"ipText": "جميع الأدوات والواجهات والمحتوى على Dociva هي ملكية فكرية لمشغلي الخدمة. تحتفظ بملكية كاملة لجميع الملفات التي ترفعها وتعالجها.",
|
||||
"changesTitle": "7. التغييرات على الشروط",
|
||||
"changesText": "نحتفظ بالحق في تعديل هذه الشروط في أي وقت. الاستمرار في استخدام الخدمة بعد التغييرات يعني قبول الشروط المحدثة.",
|
||||
"contactTitle": "8. الاتصال",
|
||||
@@ -285,8 +285,8 @@
|
||||
"totalRatings": "تقييم"
|
||||
},
|
||||
"pricing": {
|
||||
"metaTitle": "الأسعار — SaaS-PDF",
|
||||
"metaDescription": "قارن بين الخطة المجانية والاحترافية لـ SaaS-PDF. استخدم أكثر من 30 أداة مجانًا أو قم بالترقية للمعالجة غير المحدودة.",
|
||||
"metaTitle": "الأسعار — Dociva",
|
||||
"metaDescription": "قارن بين الخطة المجانية والاحترافية لـ Dociva. استخدم أكثر من 30 أداة مجانًا أو قم بالترقية للمعالجة غير المحدودة.",
|
||||
"title": "الخطط والأسعار",
|
||||
"subtitle": "ابدأ مجانًا وقم بالترقية عندما تحتاج المزيد.",
|
||||
"free": "مجاني",
|
||||
@@ -338,9 +338,9 @@
|
||||
"trustApiDesc": "يمكن لمساحات العمل الاحترافية إنشاء مفاتيح API وربط الأدوات نفسها مع الأتمتة الداخلية أو تدفقات العملاء."
|
||||
},
|
||||
"developers": {
|
||||
"metaDescription": "استكشف بوابة مطوري SaaS-PDF، وتدفق API غير المتزامن، والنقاط الجاهزة لأتمتة المستندات.",
|
||||
"metaDescription": "استكشف بوابة مطوري Dociva، وتدفق API غير المتزامن، والنقاط الجاهزة لأتمتة المستندات.",
|
||||
"badge": "بوابة المطورين",
|
||||
"title": "ابنِ تدفقات المستندات فوق واجهة SaaS-PDF البرمجية",
|
||||
"title": "ابنِ تدفقات المستندات فوق واجهة Dociva البرمجية",
|
||||
"subtitle": "استخدم نقاط التحويل والضغط وOCR والذكاء الاصطناعي نفسها الموجودة خلف التطبيق داخل أنظمتك الخاصة.",
|
||||
"getApiKey": "احصل على مفتاح API",
|
||||
"comparePlans": "قارن الخطط",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
{
|
||||
"common": {
|
||||
"appName": "SaaS-PDF",
|
||||
"appName": "Dociva",
|
||||
"tagline": "Free Online File Tools",
|
||||
"upload": "Upload File",
|
||||
"download": "Download",
|
||||
@@ -78,7 +78,7 @@
|
||||
"thinking": "Thinking...",
|
||||
"unavailable": "The assistant is temporarily unavailable. Please try again in a moment.",
|
||||
"close": "Close assistant",
|
||||
"fabTitle": "Ask SaaS-PDF",
|
||||
"fabTitle": "Ask Dociva",
|
||||
"fabSubtitle": "Smart help across all tools",
|
||||
"prompts": {
|
||||
"currentTool": "How do I use {{tool}}?",
|
||||
@@ -155,10 +155,10 @@
|
||||
},
|
||||
"pages": {
|
||||
"about": {
|
||||
"metaDescription": "Learn about SaaS-PDF — free, fast, and secure online file tools for PDFs, images, video, and text. No registration required.",
|
||||
"title": "About SaaS-PDF",
|
||||
"metaDescription": "Learn about Dociva — free, fast, and secure online file tools for PDFs, images, video, and text. No registration required.",
|
||||
"title": "About Dociva",
|
||||
"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",
|
||||
"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",
|
||||
@@ -175,7 +175,7 @@
|
||||
]
|
||||
},
|
||||
"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",
|
||||
"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",
|
||||
@@ -196,7 +196,7 @@
|
||||
"responseTime": "We typically respond within 24–48 hours."
|
||||
},
|
||||
"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",
|
||||
"lastUpdated": "Last updated: {{date}}",
|
||||
"dataCollectionTitle": "1. Data Collection",
|
||||
@@ -226,13 +226,13 @@
|
||||
"contactText": "Questions about this policy? Contact us at"
|
||||
},
|
||||
"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",
|
||||
"lastUpdated": "Last updated: {{date}}",
|
||||
"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",
|
||||
"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",
|
||||
"useItems": [
|
||||
"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."
|
||||
],
|
||||
"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",
|
||||
"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",
|
||||
"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",
|
||||
@@ -285,8 +285,8 @@
|
||||
"totalRatings": "ratings"
|
||||
},
|
||||
"pricing": {
|
||||
"metaTitle": "Pricing — SaaS-PDF",
|
||||
"metaDescription": "Compare free and pro plans for SaaS-PDF. Access 30+ tools for free, or upgrade for unlimited processing.",
|
||||
"metaTitle": "Pricing — Dociva",
|
||||
"metaDescription": "Compare free and pro plans for Dociva. Access 30+ tools for free, or upgrade for unlimited processing.",
|
||||
"title": "Plans & Pricing",
|
||||
"subtitle": "Start free and upgrade when you need more.",
|
||||
"free": "Free",
|
||||
@@ -338,9 +338,9 @@
|
||||
"trustApiDesc": "Pro workspaces can generate API keys and connect the same tools to internal automations and client flows."
|
||||
},
|
||||
"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",
|
||||
"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.",
|
||||
"getApiKey": "Get an API key",
|
||||
"comparePlans": "Compare plans",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
{
|
||||
"common": {
|
||||
"appName": "SaaS-PDF",
|
||||
"appName": "Dociva",
|
||||
"tagline": "Outils de fichiers en ligne gratuits",
|
||||
"upload": "Télécharger un fichier",
|
||||
"download": "Télécharger",
|
||||
@@ -78,7 +78,7 @@
|
||||
"thinking": "Réflexion en cours...",
|
||||
"unavailable": "L'assistant est temporairement indisponible. Veuillez réessayer dans un instant.",
|
||||
"close": "Fermer l'assistant",
|
||||
"fabTitle": "Demander à SaaS-PDF",
|
||||
"fabTitle": "Demander à Dociva",
|
||||
"fabSubtitle": "Aide intelligente sur tous les outils",
|
||||
"prompts": {
|
||||
"currentTool": "Comment utiliser {{tool}} ?",
|
||||
@@ -155,10 +155,10 @@
|
||||
},
|
||||
"pages": {
|
||||
"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.",
|
||||
"title": "À propos de SaaS-PDF",
|
||||
"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 Dociva",
|
||||
"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",
|
||||
"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é",
|
||||
@@ -175,7 +175,7 @@
|
||||
]
|
||||
},
|
||||
"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",
|
||||
"subtitle": "Vous avez une question, trouvé un bug ou souhaitez demander une fonctionnalité ? Nous serions ravis de vous entendre.",
|
||||
"formTitle": "Envoyez-nous un message",
|
||||
@@ -196,7 +196,7 @@
|
||||
"responseTime": "Nous répondons généralement sous 24 à 48 heures."
|
||||
},
|
||||
"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é",
|
||||
"lastUpdated": "Dernière mise à jour : {{date}}",
|
||||
"dataCollectionTitle": "1. Collecte de données",
|
||||
@@ -226,13 +226,13 @@
|
||||
"contactText": "Des questions sur cette politique ? Contactez-nous à"
|
||||
},
|
||||
"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",
|
||||
"lastUpdated": "Dernière mise à jour : {{date}}",
|
||||
"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",
|
||||
"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",
|
||||
"useItems": [
|
||||
"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."
|
||||
],
|
||||
"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",
|
||||
"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",
|
||||
"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",
|
||||
@@ -285,8 +285,8 @@
|
||||
"totalRatings": "évaluations"
|
||||
},
|
||||
"pricing": {
|
||||
"metaTitle": "Tarifs — SaaS-PDF",
|
||||
"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é.",
|
||||
"metaTitle": "Tarifs — Dociva",
|
||||
"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",
|
||||
"subtitle": "Commencez gratuitement et passez au pro quand vous en avez besoin.",
|
||||
"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."
|
||||
},
|
||||
"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",
|
||||
"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.",
|
||||
"getApiKey": "Obtenir une clé API",
|
||||
"comparePlans": "Comparer les forfaits",
|
||||
|
||||
@@ -6,7 +6,7 @@ import SEOHead from '@/components/seo/SEOHead';
|
||||
import { generateWebPage } from '@/utils/seo';
|
||||
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 || '';
|
||||
|
||||
type Category = 'general' | 'bug' | 'feature';
|
||||
|
||||
@@ -239,7 +239,7 @@ export default function InternalAdminPage() {
|
||||
return (
|
||||
<div className="mx-auto max-w-7xl space-y-8">
|
||||
<Helmet>
|
||||
<title>Internal Admin | SaaS PDF</title>
|
||||
<title>Internal Admin | Dociva</title>
|
||||
<meta name="robots" content="noindex,nofollow" />
|
||||
</Helmet>
|
||||
|
||||
|
||||
@@ -65,11 +65,11 @@ export default function PricingPage() {
|
||||
<>
|
||||
<SEOHead
|
||||
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"
|
||||
jsonLd={generateWebPage({
|
||||
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`,
|
||||
})}
|
||||
/>
|
||||
|
||||
@@ -4,7 +4,7 @@ import { generateWebPage } from '@/utils/seo';
|
||||
import { FILE_RETENTION_MINUTES } from '@/config/toolLimits';
|
||||
|
||||
const LAST_UPDATED = '2026-03-06';
|
||||
const CONTACT_EMAIL = 'support@saas-pdf.com';
|
||||
const CONTACT_EMAIL = 'support@dociva.io';
|
||||
|
||||
export default function PrivacyPage() {
|
||||
const { t } = useTranslation();
|
||||
|
||||
@@ -4,7 +4,7 @@ import { generateWebPage } from '@/utils/seo';
|
||||
import { FILE_RETENTION_MINUTES } from '@/config/toolLimits';
|
||||
|
||||
const LAST_UPDATED = '2026-03-06';
|
||||
const CONTACT_EMAIL = 'support@saas-pdf.com';
|
||||
const CONTACT_EMAIL = 'support@dociva.io';
|
||||
|
||||
export default function TermsPage() {
|
||||
const { t } = useTranslation();
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
export const RATING_PROMPT_EVENT = 'saaspdf:rating-prompt';
|
||||
export const RATING_PROMPT_EVENT = 'dociva:rating-prompt';
|
||||
|
||||
interface RatingPromptOptions {
|
||||
forceOpen?: boolean;
|
||||
|
||||
@@ -120,13 +120,13 @@ export function generateOrganization(origin: string): object {
|
||||
return {
|
||||
'@context': 'https://schema.org',
|
||||
'@type': 'Organization',
|
||||
name: 'SaaS-PDF',
|
||||
name: 'Dociva',
|
||||
url: origin,
|
||||
logo: `${origin}/favicon.svg`,
|
||||
sameAs: [],
|
||||
contactPoint: {
|
||||
'@type': 'ContactPoint',
|
||||
email: 'support@saas-pdf.com',
|
||||
email: 'support@dociva.io',
|
||||
contactType: 'customer support',
|
||||
availableLanguage: ['English', 'Arabic', 'French'],
|
||||
},
|
||||
@@ -149,7 +149,7 @@ export function generateWebPage(page: {
|
||||
url: page.url,
|
||||
isPartOf: {
|
||||
'@type': 'WebSite',
|
||||
name: 'SaaS-PDF',
|
||||
name: 'Dociva',
|
||||
},
|
||||
};
|
||||
}
|
||||
@@ -172,11 +172,11 @@ export function generateBlogPosting(post: {
|
||||
inLanguage: post.inLanguage,
|
||||
author: {
|
||||
'@type': 'Organization',
|
||||
name: 'SaaS-PDF',
|
||||
name: 'Dociva',
|
||||
},
|
||||
publisher: {
|
||||
'@type': 'Organization',
|
||||
name: 'SaaS-PDF',
|
||||
name: 'Dociva',
|
||||
},
|
||||
mainEntityOfPage: post.url,
|
||||
};
|
||||
|
||||
@@ -4,16 +4,29 @@ upstream backend {
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
server_name _;
|
||||
server_name dociva.io www.dociva.io;
|
||||
client_max_body_size 100M;
|
||||
|
||||
# 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 {
|
||||
listen 443 ssl http2;
|
||||
server_name _;
|
||||
server_name dociva.io;
|
||||
client_max_body_size 100M;
|
||||
|
||||
# SSL certificates (mount via certbot / Let's Encrypt)
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
#!/bin/bash
|
||||
# deploy.sh — Production deployment script for SaaS-PDF
|
||||
# deploy.sh — Production deployment script for Dociva
|
||||
set -euo pipefail
|
||||
|
||||
echo "========================================="
|
||||
echo " SaaS-PDF Production Deployment"
|
||||
echo " Dociva Production Deployment"
|
||||
echo "========================================="
|
||||
|
||||
# Colors
|
||||
|
||||
@@ -4,8 +4,8 @@ generate_sitemap.py
|
||||
Generates sitemap.xml for SEO from the full route inventory.
|
||||
|
||||
Usage:
|
||||
python scripts/generate_sitemap.py --domain https://saas-pdf.com
|
||||
python scripts/generate_sitemap.py --domain https://saas-pdf.com --output frontend/public/sitemap.xml
|
||||
python scripts/generate_sitemap.py --domain https://dociva.io
|
||||
python scripts/generate_sitemap.py --domain https://dociva.io --output frontend/public/sitemap.xml
|
||||
# Or set SITE_DOMAIN env var and omit --domain
|
||||
"""
|
||||
|
||||
@@ -130,7 +130,7 @@ def generate_sitemap(domain: str) -> str:
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description='Generate sitemap.xml')
|
||||
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')
|
||||
args = parser.parse_args()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user