diff --git a/.env.example b/.env.example index 2d4da55..52cfbfa 100644 --- a/.env.example +++ b/.env.example @@ -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) diff --git a/.gitignore b/.gitignore index a2424aa..b0451f1 100644 --- a/.gitignore +++ b/.gitignore @@ -53,3 +53,7 @@ logs/ htmlcov/ .coverage coverage/ + +# Celery +celerybeat-schedule +backend/celerybeat-schedule \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3fb8a8e..80fcd91 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,4 +1,4 @@ -# Contributing to SaaS-PDF +# Contributing to Dociva ## Safety Rules diff --git a/README.md b/README.md index 291c8f4..d1c0665 100644 --- a/README.md +++ b/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 diff --git a/backend/app/routes/health.py b/backend/app/routes/health.py index e6849ff..f3791d7 100644 --- a/backend/app/routes/health.py +++ b/backend/app/routes/health.py @@ -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", }) diff --git a/backend/app/services/contact_service.py b/backend/app/services/contact_service.py index b06a10b..11097cb 100644 --- a/backend/app/services/contact_service.py +++ b/backend/app/services/contact_service.py @@ -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"""

New Contact Message

From: {name} <{email}>

diff --git a/backend/app/services/email_service.py b/backend/app/services/email_service.py index 3706dfe..45137ff 100644 --- a/backend/app/services/email_service.py +++ b/backend/app/services/email_service.py @@ -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"""

Password Reset

-

You requested a password reset for your SaaS-PDF account.

+

You requested a password reset for your Dociva account.

Reset Password

This link expires in 1 hour. If you didn't request this, you can safely ignore this email.

""" - return send_email(to, "Reset your SaaS-PDF password", html) + return send_email(to, "Reset your Dociva password", html) diff --git a/backend/app/services/site_assistant_service.py b/backend/app/services/site_assistant_service.py index dc579d3..71a66f4 100644 --- a/backend/app/services/site_assistant_service.py +++ b/backend/app/services/site_assistant_service.py @@ -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. diff --git a/backend/celerybeat-schedule b/backend/celerybeat-schedule index 809719a..aceb29b 100644 Binary files a/backend/celerybeat-schedule and b/backend/celerybeat-schedule differ diff --git a/backend/config/__init__.py b/backend/config/__init__.py index ebedac6..a5d5fb6 100644 --- a/backend/config/__init__.py +++ b/backend/config/__init__.py @@ -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 diff --git a/backend/tests/conftest.py b/backend/tests/conftest.py index 769150a..a36711b 100644 --- a/backend/tests/conftest.py +++ b/backend/tests/conftest.py @@ -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 diff --git a/docs/PLAN.md b/docs/PLAN.md index 8ac15a3..1603b35 100644 --- a/docs/PLAN.md +++ b/docs/PLAN.md @@ -1,4 +1,4 @@ -# خطة رفع SaaS-PDF إلى مستوى المنافسة +# خطة رفع Dociva إلى مستوى المنافسة ## Summary - اعتماد مسار نمو واضح: `B2C SEO-first` أولاً، ثم `Freemium monetization`، ثم `B2B API expansion`. diff --git a/docs/seo_strategy.md b/docs/seo_strategy.md index a6079ea..7d5a9e3 100644 --- a/docs/seo_strategy.md +++ b/docs/seo_strategy.md @@ -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) diff --git a/docs/tool_inventory.md b/docs/tool_inventory.md index 83c9278..f3a14ac 100644 --- a/docs/tool_inventory.md +++ b/docs/tool_inventory.md @@ -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` diff --git a/frontend/.env.example b/frontend/.env.example index 471f900..7f1ac2d 100644 --- a/frontend/.env.example +++ b/frontend/.env.example @@ -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= diff --git a/frontend/CLAUDE.md b/frontend/CLAUDE.md index 987f788..72d0ba9 100644 --- a/frontend/CLAUDE.md +++ b/frontend/CLAUDE.md @@ -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/) diff --git a/frontend/index.html b/frontend/index.html index ae7744d..bebf00f 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -6,24 +6,24 @@ - + - + - + - + - SaaS-PDF — Free Online File Tools + Dociva — Free Online File Tools
diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 1ab4845..943cbae 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -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", diff --git a/frontend/package.json b/frontend/package.json index a04d288..f59d7ec 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,5 +1,5 @@ { - "name": "saas-pdf-frontend", + "name": "dociva-frontend", "private": true, "version": "1.0.0", "type": "module", diff --git a/frontend/public/favicon.svg b/frontend/public/favicon.svg index 1142db6..c0420d5 100644 --- a/frontend/public/favicon.svg +++ b/frontend/public/favicon.svg @@ -1,7 +1,17 @@ - - - - - + + + + + + + + + + + + + + + D diff --git a/frontend/public/humans.txt b/frontend/public/humans.txt index 656781c..8fb2ea3 100644 --- a/frontend/public/humans.txt +++ b/frontend/public/humans.txt @@ -1,5 +1,5 @@ /* TEAM */ -Project: SaaS-PDF +Project: Dociva Role: Full-Stack Development Technology: React, TypeScript, Python, Flask, Celery diff --git a/frontend/public/llms.txt b/frontend/public/llms.txt index 8dd7839..51fb42f 100644 --- a/frontend/public/llms.txt +++ b/frontend/public/llms.txt @@ -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. diff --git a/frontend/public/logo.svg b/frontend/public/logo.svg new file mode 100644 index 0000000..27e296e --- /dev/null +++ b/frontend/public/logo.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + doc + iva + diff --git a/frontend/public/robots.txt b/frontend/public/robots.txt index 162e000..dd33691 100644 --- a/frontend/public/robots.txt +++ b/frontend/public/robots.txt @@ -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 diff --git a/frontend/public/sitemap.xml b/frontend/public/sitemap.xml index 54b698f..8aac8fd 100644 --- a/frontend/public/sitemap.xml +++ b/frontend/public/sitemap.xml @@ -1,43 +1,43 @@ - + - https://saas-pdf.com/ + https://dociva.io/ 2026-03-14 daily 1.0 - https://saas-pdf.com/about + https://dociva.io/about 2026-03-14 monthly 0.4 - https://saas-pdf.com/contact + https://dociva.io/contact 2026-03-14 monthly 0.4 - https://saas-pdf.com/privacy + https://dociva.io/privacy 2026-03-14 yearly 0.3 - https://saas-pdf.com/terms + https://dociva.io/terms 2026-03-14 yearly 0.3 - https://saas-pdf.com/pricing + https://dociva.io/pricing 2026-03-14 monthly 0.7 - https://saas-pdf.com/blog + https://dociva.io/blog 2026-03-14 weekly 0.6 @@ -45,109 +45,109 @@ - https://saas-pdf.com/tools/pdf-to-word + https://dociva.io/tools/pdf-to-word 2026-03-14 weekly 0.9 - https://saas-pdf.com/tools/word-to-pdf + https://dociva.io/tools/word-to-pdf 2026-03-14 weekly 0.9 - https://saas-pdf.com/tools/compress-pdf + https://dociva.io/tools/compress-pdf 2026-03-14 weekly 0.9 - https://saas-pdf.com/tools/merge-pdf + https://dociva.io/tools/merge-pdf 2026-03-14 weekly 0.9 - https://saas-pdf.com/tools/split-pdf + https://dociva.io/tools/split-pdf 2026-03-14 weekly 0.8 - https://saas-pdf.com/tools/rotate-pdf + https://dociva.io/tools/rotate-pdf 2026-03-14 weekly 0.7 - https://saas-pdf.com/tools/pdf-to-images + https://dociva.io/tools/pdf-to-images 2026-03-14 weekly 0.8 - https://saas-pdf.com/tools/images-to-pdf + https://dociva.io/tools/images-to-pdf 2026-03-14 weekly 0.8 - https://saas-pdf.com/tools/watermark-pdf + https://dociva.io/tools/watermark-pdf 2026-03-14 weekly 0.7 - https://saas-pdf.com/tools/remove-watermark-pdf + https://dociva.io/tools/remove-watermark-pdf 2026-03-14 weekly 0.7 - https://saas-pdf.com/tools/protect-pdf + https://dociva.io/tools/protect-pdf 2026-03-14 weekly 0.8 - https://saas-pdf.com/tools/unlock-pdf + https://dociva.io/tools/unlock-pdf 2026-03-14 weekly 0.8 - https://saas-pdf.com/tools/page-numbers + https://dociva.io/tools/page-numbers 2026-03-14 weekly 0.7 - https://saas-pdf.com/tools/reorder-pdf + https://dociva.io/tools/reorder-pdf 2026-03-14 weekly 0.7 - https://saas-pdf.com/tools/extract-pages + https://dociva.io/tools/extract-pages 2026-03-14 weekly 0.7 - https://saas-pdf.com/tools/pdf-editor + https://dociva.io/tools/pdf-editor 2026-03-14 weekly 0.8 - https://saas-pdf.com/tools/pdf-flowchart + https://dociva.io/tools/pdf-flowchart 2026-03-14 weekly 0.7 - https://saas-pdf.com/tools/pdf-to-excel + https://dociva.io/tools/pdf-to-excel 2026-03-14 weekly 0.8 @@ -155,25 +155,25 @@ - https://saas-pdf.com/tools/image-converter + https://dociva.io/tools/image-converter 2026-03-14 weekly 0.8 - https://saas-pdf.com/tools/image-resize + https://dociva.io/tools/image-resize 2026-03-14 weekly 0.8 - https://saas-pdf.com/tools/compress-image + https://dociva.io/tools/compress-image 2026-03-14 weekly 0.8 - https://saas-pdf.com/tools/remove-background + https://dociva.io/tools/remove-background 2026-03-14 weekly 0.8 @@ -181,31 +181,31 @@ - https://saas-pdf.com/tools/ocr + https://dociva.io/tools/ocr 2026-03-14 weekly 0.8 - https://saas-pdf.com/tools/chat-pdf + https://dociva.io/tools/chat-pdf 2026-03-14 weekly 0.8 - https://saas-pdf.com/tools/summarize-pdf + https://dociva.io/tools/summarize-pdf 2026-03-14 weekly 0.8 - https://saas-pdf.com/tools/translate-pdf + https://dociva.io/tools/translate-pdf 2026-03-14 weekly 0.8 - https://saas-pdf.com/tools/extract-tables + https://dociva.io/tools/extract-tables 2026-03-14 weekly 0.8 @@ -213,31 +213,31 @@ - https://saas-pdf.com/tools/html-to-pdf + https://dociva.io/tools/html-to-pdf 2026-03-14 weekly 0.7 - https://saas-pdf.com/tools/qr-code + https://dociva.io/tools/qr-code 2026-03-14 weekly 0.7 - https://saas-pdf.com/tools/video-to-gif + https://dociva.io/tools/video-to-gif 2026-03-14 weekly 0.7 - https://saas-pdf.com/tools/word-counter + https://dociva.io/tools/word-counter 2026-03-14 weekly 0.6 - https://saas-pdf.com/tools/text-cleaner + https://dociva.io/tools/text-cleaner 2026-03-14 weekly 0.6 diff --git a/frontend/src/components/layout/SiteAssistant.tsx b/frontend/src/components/layout/SiteAssistant.tsx index 690dc25..464ccc2 100644 --- a/frontend/src/components/layout/SiteAssistant.tsx +++ b/frontend/src/components/layout/SiteAssistant.tsx @@ -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'; diff --git a/frontend/src/components/seo/SEOHead.tsx b/frontend/src/components/seo/SEOHead.tsx index 1a2a355..485da5c 100644 --- a/frontend/src/components/seo/SEOHead.tsx +++ b/frontend/src/components/seo/SEOHead.tsx @@ -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; diff --git a/frontend/src/i18n/ar.json b/frontend/src/i18n/ar.json index c4c22c6..ac6d3cc 100644 --- a/frontend/src/i18n/ar.json +++ b/frontend/src/i18n/ar.json @@ -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": "قارن الخطط", diff --git a/frontend/src/i18n/en.json b/frontend/src/i18n/en.json index aaf238f..18b7e03 100644 --- a/frontend/src/i18n/en.json +++ b/frontend/src/i18n/en.json @@ -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", diff --git a/frontend/src/i18n/fr.json b/frontend/src/i18n/fr.json index bf9b249..a7b9894 100644 --- a/frontend/src/i18n/fr.json +++ b/frontend/src/i18n/fr.json @@ -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", diff --git a/frontend/src/pages/ContactPage.tsx b/frontend/src/pages/ContactPage.tsx index df4388e..c82e7a6 100644 --- a/frontend/src/pages/ContactPage.tsx +++ b/frontend/src/pages/ContactPage.tsx @@ -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'; diff --git a/frontend/src/pages/InternalAdminPage.tsx b/frontend/src/pages/InternalAdminPage.tsx index c950696..4052f07 100644 --- a/frontend/src/pages/InternalAdminPage.tsx +++ b/frontend/src/pages/InternalAdminPage.tsx @@ -239,7 +239,7 @@ export default function InternalAdminPage() { return (
- Internal Admin | SaaS PDF + Internal Admin | Dociva diff --git a/frontend/src/pages/PricingPage.tsx b/frontend/src/pages/PricingPage.tsx index cd1190f..eb602fc 100644 --- a/frontend/src/pages/PricingPage.tsx +++ b/frontend/src/pages/PricingPage.tsx @@ -65,11 +65,11 @@ export default function PricingPage() { <> diff --git a/frontend/src/pages/PrivacyPage.tsx b/frontend/src/pages/PrivacyPage.tsx index ab62ea1..058c3b4 100644 --- a/frontend/src/pages/PrivacyPage.tsx +++ b/frontend/src/pages/PrivacyPage.tsx @@ -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(); diff --git a/frontend/src/pages/TermsPage.tsx b/frontend/src/pages/TermsPage.tsx index c8336de..784ac44 100644 --- a/frontend/src/pages/TermsPage.tsx +++ b/frontend/src/pages/TermsPage.tsx @@ -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(); diff --git a/frontend/src/utils/ratingPrompt.ts b/frontend/src/utils/ratingPrompt.ts index 7c9345a..34fe90d 100644 --- a/frontend/src/utils/ratingPrompt.ts +++ b/frontend/src/utils/ratingPrompt.ts @@ -1,4 +1,4 @@ -export const RATING_PROMPT_EVENT = 'saaspdf:rating-prompt'; +export const RATING_PROMPT_EVENT = 'dociva:rating-prompt'; interface RatingPromptOptions { forceOpen?: boolean; diff --git a/frontend/src/utils/seo.ts b/frontend/src/utils/seo.ts index 3967da8..b6b4044 100644 --- a/frontend/src/utils/seo.ts +++ b/frontend/src/utils/seo.ts @@ -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, }; diff --git a/nginx/nginx.prod.conf b/nginx/nginx.prod.conf index 8740d8b..a29b2ac 100644 --- a/nginx/nginx.prod.conf +++ b/nginx/nginx.prod.conf @@ -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) diff --git a/scripts/deploy.sh b/scripts/deploy.sh index cc023b6..431b63c 100644 --- a/scripts/deploy.sh +++ b/scripts/deploy.sh @@ -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 diff --git a/scripts/generate_sitemap.py b/scripts/generate_sitemap.py index edc9bb9..4f6c2ba 100644 --- a/scripts/generate_sitemap.py +++ b/scripts/generate_sitemap.py @@ -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()