First Commit

This commit is contained in:
2025-07-15 11:33:04 +02:00
commit 7efe09331b
37 changed files with 3857 additions and 0 deletions

142
.gitignore vendored Normal file
View File

@ -0,0 +1,142 @@
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
pip-wheel-metadata/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
.python-version
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
__pypackages__/
# Celery stuff
celerybeat-schedule
celerybeat.pid
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
# IDE
.vscode/
.idea/
*.swp
*.swo
# OS
.DS_Store
Thumbs.db
# Docker
.dockerignore

25
Dockerfile Normal file
View File

@ -0,0 +1,25 @@
FROM python:3.11-slim
WORKDIR /app
# Copy requirements first for better caching
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Copy all application files
COPY . .
# Build assets for production
RUN python build_assets.py
# Set production environment
ENV FLASK_ENV=production
ENV FLASK_DEBUG=0
# Ensure proper permissions
RUN chmod +x app.py
EXPOSE 5000
# Use python module syntax for better reliability
CMD ["python", "-u", "app.py"]

139
Makefile Normal file
View File

@ -0,0 +1,139 @@
# Kobelly Base Website - Makefile
.PHONY: help install build clean run run-prod deploy dev-setup docker-run docker-run-dev docker-stop docker-stop-dev docker-logs docker-logs-dev
# Default target
help:
@echo "Kobelly Base Website - Available Commands:"
@echo ""
@echo "Development:"
@echo " install - Install Python dependencies"
@echo " dev-setup - Setup development environment"
@echo " run - Run development server"
@echo " run-prod - Run production server"
@echo ""
@echo "Build & Deploy:"
@echo " build - Build minified assets"
@echo " clean - Clean old assets"
@echo " deploy - Clean and build assets"
@echo ""
@echo "Docker:"
@echo " docker-run - Run production Docker container"
@echo " docker-run-dev - Run development Docker container"
@echo " docker-stop - Stop production container"
@echo " docker-stop-dev - Stop development container"
@echo " docker-logs - View production logs"
@echo " docker-logs-dev - View development logs"
# Install dependencies
install:
@echo "📦 Installing Python dependencies..."
pip install -r requirements.txt
@echo "✅ Dependencies installed successfully!"
# Setup development environment
dev-setup: install
@echo "🔧 Setting up development environment..."
@echo "✅ Development environment ready!"
@echo "💡 Run 'make run' to start the development server"
# Build assets
build:
@echo "🔨 Building assets..."
python build_assets.py
@echo "✅ Assets built successfully!"
# Clean old assets
clean:
@echo "🧹 Cleaning old assets..."
python build_assets.py clean
@echo "✅ Cleanup completed!"
# Deploy (clean + build)
deploy: clean build
@echo "🚀 Deployment ready!"
# Run development server
run:
@echo "🚀 Starting development server..."
@echo "🌐 Website will be available at: http://localhost:5000"
@echo "🔧 Debug mode: ON"
@echo "📝 Press Ctrl+C to stop"
FLASK_DEBUG=1 python app.py
# Run production server
run-prod:
@echo "🚀 Starting production server..."
@echo "🌐 Website will be available at: http://localhost:5000"
@echo "🔧 Debug mode: OFF"
@echo "📝 Press Ctrl+C to stop"
FLASK_DEBUG=0 python app.py
# Docker commands
docker-run:
@echo "🐳 Running production Docker container..."
docker-compose up --build -d
@echo "✅ Production container started!"
@echo "🌐 Website available at: http://localhost:10332"
docker-run-dev:
@echo "🐳 Running development Docker container..."
docker-compose -f docker-compose.dev.yml up --build -d
@echo "✅ Development container started!"
@echo "🌐 Website available at: http://localhost:10333"
docker-stop:
@echo "🛑 Stopping production Docker container..."
docker-compose down
@echo "✅ Production container stopped!"
docker-stop-dev:
@echo "🛑 Stopping development Docker container..."
docker-compose -f docker-compose.dev.yml down
@echo "✅ Development container stopped!"
docker-logs:
@echo "📋 Production container logs:"
docker-compose logs -f
docker-logs-dev:
@echo "📋 Development container logs:"
docker-compose -f docker-compose.dev.yml logs -f
# Additional utility commands
test:
@echo "🧪 Running tests..."
@echo "⚠️ No tests configured yet"
@echo "💡 Add your test commands here"
lint:
@echo "🔍 Running linting..."
@echo "⚠️ No linting configured yet"
@echo "💡 Add your linting commands here"
format:
@echo "🎨 Formatting code..."
@echo "⚠️ No formatting configured yet"
@echo "💡 Add your formatting commands here"
# Database commands (if needed in the future)
db-migrate:
@echo "🗄️ Running database migrations..."
@echo "⚠️ No database configured yet"
@echo "💡 Add your migration commands here"
db-seed:
@echo "🌱 Seeding database..."
@echo "⚠️ No database configured yet"
@echo "💡 Add your seeding commands here"
# Backup and restore (if needed in the future)
backup:
@echo "💾 Creating backup..."
@echo "⚠️ No backup configured yet"
@echo "💡 Add your backup commands here"
restore:
@echo "📥 Restoring from backup..."
@echo "⚠️ No restore configured yet"
@echo "💡 Add your restore commands here"

356
README.md Normal file
View File

@ -0,0 +1,356 @@
# Kobelly Base website
A professional Flask-based website that will be used to create websites for small businesses. This is the base set of files all websites will build off. Features multilanguage support (English, Dutch, French, German) with a simple JSON-based translation system and is fully dockerized for easy deployment.
## Features
- 🌐 **Multilanguage Support**: English (EN), Dutch (NL), French (FR), German (DE) with JSON-based translations
- 📱 **Responsive Design**: Modern, mobile-friendly interface
- 🎨 **Professional UI**: Clean, modern design with Bootstrap 5
- 🐳 **Docker Support**: Easy containerization and deployment
-**Fast Performance**: Optimized for speed and performance with minified assets
- 🔧 **No Database Required**: Simple, lightweight setup
- 🚀 **Asset Optimization**: CSS/JS minification with cache busting
- 📧 **Contact Form**: Fully functional email contact form
- 🗺️ **SEO Optimized**: Sitemap generation and robots.txt
## Pages
- **Home**: Hero section and other elements to promote a business
- **Services**: Detailed service offerings with pricing information
- **About**: Company story, team, and values
- **Contact**: Contact form and business information
## Quick Start
### Local Development (Recommended)
1. **Install Python dependencies:**
```bash
pip install -r requirements.txt
```
2. **Build assets (optional, for production-like experience):**
```bash
make build
```
3. **Run the application:**
```bash
python app.py
```
4. **Access the website:**
Open your browser and go to `http://localhost:5000`
### Using Make Commands
The project includes a Makefile for common tasks:
```bash
make help # Show all available commands
make install # Install dependencies
make build # Build minified assets
make clean # Clean old assets
make run # Run development server
make run-prod # Run production server
make deploy # Clean and build assets
make dev-setup # Setup development environment
# Docker commands
make docker-run # Run production Docker container
make docker-run-dev # Run development Docker container
make docker-stop # Stop production container
make docker-stop-dev # Stop development container
make docker-logs # View production logs
make docker-logs-dev # View development logs
```
### Docker Deployment
#### Production Mode (Default)
1. **Build and run with Docker Compose:**
```bash
docker-compose up --build
```
2. **Or build and run manually:**
```bash
docker build -t kobelly-website .
docker run -p 5000:5000 kobelly-website
```
#### Development Mode
For local development with Docker (with live reload and debug mode):
1. **Build and run development container:**
```bash
docker-compose -f docker-compose.dev.yml up --build
```
2. **Or use Make commands:**
```bash
make docker-run-dev # Start development container
make docker-logs-dev # View development logs
make docker-stop-dev # Stop development container
```
**Development vs Production:**
- **Development**: Debug mode enabled, live code reloading, unminified assets
- **Production**: Debug disabled, minified assets, optimized performance
## Project Structure
```
Kobelly/
├── app.py # Main Flask application
├── requirements.txt # Python dependencies
├── Dockerfile # Docker configuration
├── docker-compose.yml # Docker Compose configuration
├── docker-compose.dev.yml # Development Docker Compose
├── Makefile # Build and deployment commands
├── build_assets.py # Asset minification script
├── translation_manager.py # JSON-based translation system
├── test_translations.py # Translation testing script
├── robots.txt # Search engine configuration
├── static/ # Static assets
│ ├── css/ # CSS files
│ │ ├── main.css # Main stylesheet
│ │ └── main.min.css # Minified CSS (generated)
│ ├── js/ # JavaScript files
│ │ ├── main.js # Main script
│ │ └── main.min.js # Minified JS (generated)
│ └── images/ # Images and icons
├── templates/ # HTML templates
│ ├── base.html # Base template with navigation
│ ├── index.html # Homepage
│ ├── services.html # Services page
│ ├── about.html # About page
│ ├── contact.html # Contact page
│ └── components/ # Reusable template components
│ ├── hero_section.html
│ ├── cta_section.html
└── translations/ # JSON translation files
├── en.json # English translations
├── nl.json # Dutch translations
├── fr.json # French translations
└── de.json # German translations
```
## Multilanguage Support
The website supports four languages using a simple JSON-based translation system:
- 🇺🇸 **English** (EN) - Default
- 🇳🇱 **Dutch** (NL)
- 🇫🇷 **French** (FR)
- 🇩🇪 **German** (DE)
Users can switch languages using the language selector in the navigation bar or URL parameters (`?lang=de`). The language preference is stored in the session.
### Translation System
The project uses a custom JSON-based translation system that:
- **No compilation needed** - Just edit JSON files directly
- **Real-time updates** - Changes appear immediately after restart
- **Simple maintenance** - Clear JSON structure
- **Independent languages** - Edit English without breaking translations
### Adding New Translations
1. **Add the string to your template:**
```html
<h2>{{ t('New Section Title') }}</h2>
```
2. **Add it to the translation files:**
```json
// translations/en.json
{
"New Section Title": "New Section Title"
}
// translations/de.json
{
"New Section Title": "Neuer Abschnittstitel"
}
```
3. **Restart your Flask app** - Changes appear immediately!
## Customization
### Content Updates
1. **Text Content**: Edit the HTML templates in the `templates/` directory
2. **Translations**: Update the `.json` files in the `translations/` directory
3. **Styling**: Modify the CSS in `static/css/main.css`
### Adding New Pages
1. Add a new route in `app.py`
2. Create a new template file in `templates/`
3. Add navigation link in `templates/base.html`
### Updating Translations
The JSON-based system makes translation updates simple:
1. **Edit translation files directly:**
```bash
# Open and edit the JSON files
nano translations/en.json
nano translations/de.json
# etc.
```
2. **Restart the application:**
```bash
python app.py
```
3. **Test translations:**
```bash
python test_translations.py
```
## Asset Optimization
The project includes automatic CSS and JavaScript minification with cache busting for optimal performance.
### Asset Building
**Development Mode:**
- Uses unminified assets for easier debugging
- Assets are served directly from source files
**Production Mode:**
- Automatically serves minified assets
- Cache busting prevents browser caching issues
- Assets are optimized for faster loading
### Building Assets
```bash
# Build minified assets
make build
# Clean old cache-busted assets
make clean
# Full deployment (clean + build)
make deploy
```
### Asset Files
- **CSS**: `static/css/main.css` → `static/css/main.min.css`
- **JavaScript**: `static/js/main.js` → `static/js/main.min.js`
The build process creates cache-busted versions with MD5 hashes in the filename to ensure browsers always load the latest version.
## Contact Form Setup
The website includes a fully functional contact form that sends email notifications. To set up email functionality:
### 1. Email Configuration
The application uses environment variables for email configuration. You can set these in your environment or create a `.env` file:
```bash
# For Gmail (recommended)
MAIL_SERVER=smtp.gmail.com
MAIL_PORT=587
MAIL_USE_TLS=True
MAIL_USERNAME=contact@kobelly.be
MAIL_PASSWORD=your-app-password-here
MAIL_DEFAULT_SENDER=contact@kobelly.be
```
### 2. For Gmail users:
- Enable 2-factor authentication on your Google account
- Generate an "App Password" in Google Account settings
- Use the app password as `MAIL_PASSWORD`
### 3. Alternative Email Providers
**For other SMTP providers, update the settings accordingly:**
```bash
# Example for Outlook/Hotmail
MAIL_SERVER=smtp-mail.outlook.com
MAIL_PORT=587
MAIL_USE_TLS=True
# Example for custom SMTP server
MAIL_SERVER=your-smtp-server.com
MAIL_PORT=587
MAIL_USE_TLS=True
```
### 4. Testing the Contact Form
1. Start the application
2. Navigate to the Contact page
3. Fill out and submit the form
4. Check your email for the notification
The form includes:
- **Form validation** (required fields, email format, phone format)
- **Loading states** (button shows spinner during submission)
- **Success/error notifications** (toast notifications)
- **Email notifications** (HTML and plain text formats)
## Configuration
### Environment Variables
- `SECRET_KEY`: Secret key for Flask sessions (default: 'your-secret-key-change-in-production')
- `FLASK_ENV`: Flask environment (development/production)
- `FLASK_DEBUG`: Debug mode (0=disabled, 1=enabled, defaults to 1 in development)
- `MAIL_SERVER`: SMTP server for email (default: smtp.gmail.com)
- `MAIL_PORT`: SMTP port (default: 587)
- `MAIL_USE_TLS`: Use TLS encryption (default: True)
- `MAIL_USERNAME`: Email username
- `MAIL_PASSWORD`: Email password
- `MAIL_DEFAULT_SENDER`: Default sender email
**Environment Modes:**
**Development (Local):**
```bash
FLASK_ENV=development
FLASK_DEBUG=1
```
**Production (Docker):**
```bash
FLASK_ENV=production
FLASK_DEBUG=0
```
### Production Deployment
For production deployment:
1. Set a strong `SECRET_KEY`
2. Disable debug mode
3. Use a production WSGI server (e.g., Gunicorn)
4. Set up proper SSL/TLS certificates
5. Configure a reverse proxy (e.g., Nginx)
## Technologies Used
- **Backend**: Flask 2.3.3
- **Frontend**: Bootstrap 5, Font Awesome
- **Translation**: Custom JSON-based system
- **Containerization**: Docker, Docker Compose
- **Styling**: Custom CSS with CSS variables
- **Asset Management**: Custom build script with CSS/JS minification
- **Email**: Flask-Mail
## Browser Support
- Chrome (latest)
- Firefox (latest)
- Safari (latest)
- Edge (latest)
- Mobile browsers (iOS Safari, Chrome Mobile)

205
app.py Normal file
View File

@ -0,0 +1,205 @@
#!/usr/bin/env python3
"""
Kobelly Base Website - Flask Application
A professional, multilanguage website template for small businesses
"""
import os
import json
from datetime import datetime
from flask import Flask, render_template, request, session, redirect, url_for, flash, jsonify
from flask_mail import Mail, Message
from translation_manager import init_app as init_translations, translate, get_current_language, set_language
# Initialize Flask app
app = Flask(__name__)
# Configuration
app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY', 'dev-secret-key-change-in-production')
app.config['MAIL_SERVER'] = os.environ.get('MAIL_SERVER', 'smtp.gmail.com')
app.config['MAIL_PORT'] = int(os.environ.get('MAIL_PORT', 587))
app.config['MAIL_USE_TLS'] = os.environ.get('MAIL_USE_TLS', 'True').lower() == 'true'
app.config['MAIL_USE_SSL'] = os.environ.get('MAIL_USE_SSL', 'False').lower() == 'true'
app.config['MAIL_USERNAME'] = os.environ.get('MAIL_USERNAME', 'your-email@gmail.com')
app.config['MAIL_PASSWORD'] = os.environ.get('MAIL_PASSWORD', 'your-password')
app.config['MAIL_DEFAULT_SENDER'] = os.environ.get('MAIL_DEFAULT_SENDER', 'your-email@gmail.com')
# Initialize extensions
mail = Mail(app)
# Initialize translation system
init_translations(app)
# Development vs Production mode
DEBUG_MODE = os.environ.get('FLASK_DEBUG', '0') == '1'
def get_asset_url(filename, asset_type='css'):
"""Get the appropriate asset URL based on environment"""
if DEBUG_MODE:
return url_for('static', filename=f'{asset_type}/{filename}')
else:
# In production, use minified assets with cache busting
static_dir = 'static'
asset_dir = os.path.join(static_dir, asset_type)
if asset_type == 'css':
base_name = 'main.min.css'
else:
base_name = 'main.min.js'
# Look for cache-busted version
if os.path.exists(asset_dir):
for file in os.listdir(asset_dir):
if file.startswith('main.') and file.endswith(f'.min.{asset_type}'):
return url_for('static', filename=f'{asset_type}/{file}')
# Fallback to regular minified version
return url_for('static', filename=f'{asset_type}/{base_name}')
@app.context_processor
def inject_globals():
"""Inject global variables into templates"""
return {
'get_asset_url': get_asset_url,
'current_year': datetime.now().year,
'debug_mode': DEBUG_MODE,
't': translate
}
@app.route('/')
def index():
"""Homepage"""
return render_template('index.html')
@app.route('/services')
def services():
"""Services page"""
return render_template('services.html')
@app.route('/about')
def about():
"""About page"""
return render_template('about.html')
@app.route('/contact')
def contact():
"""Contact page"""
return render_template('contact.html')
@app.route('/set-language/<lang>')
def set_language_route(lang):
"""Set language and redirect back"""
if set_language(lang):
# Redirect back to the previous page or home
return redirect(request.referrer or url_for('index'))
return redirect(url_for('index'))
@app.route('/contact', methods=['POST'])
def contact_submit():
"""Handle contact form submission"""
try:
name = request.form.get('name', '').strip()
email = request.form.get('email', '').strip()
subject = request.form.get('subject', '').strip()
message = request.form.get('message', '').strip()
# Basic validation
if not all([name, email, subject, message]):
flash(translate('Please fill in all fields'), 'error')
return redirect(url_for('contact'))
# Create email message
msg = Message(
subject=f"Contact Form: {subject}",
recipients=[app.config['MAIL_DEFAULT_SENDER']],
body=f"""
New contact form submission:
Name: {name}
Email: {email}
Subject: {subject}
Message:
{message}
---
Sent from the website contact form.
""".strip()
)
# Send email
mail.send(msg)
flash(translate('Thank you! Your message has been sent successfully.'), 'success')
return redirect(url_for('contact'))
except Exception as e:
print(f"Error sending email: {e}")
flash(translate('Sorry, there was an error sending your message. Please try again.'), 'error')
return redirect(url_for('contact'))
@app.route('/sitemap.xml')
def sitemap():
"""Generate sitemap for SEO"""
pages = [
{'url': url_for('index', _external=True), 'priority': '1.0'},
{'url': url_for('services', _external=True), 'priority': '0.8'},
{'url': url_for('about', _external=True), 'priority': '0.7'},
{'url': url_for('contact', _external=True), 'priority': '0.6'},
]
sitemap_xml = render_template('sitemap.xml', pages=pages)
response = app.make_response(sitemap_xml)
response.headers["Content-Type"] = "application/xml"
return response
@app.errorhandler(400)
def bad_request(error):
return render_template('400.html'), 400
@app.errorhandler(401)
def unauthorized(error):
return render_template('401.html'), 401
@app.errorhandler(403)
def forbidden(error):
return render_template('403.html'), 403
@app.errorhandler(405)
def method_not_allowed(error):
return render_template('405.html'), 405
@app.errorhandler(502)
def bad_gateway(error):
return render_template('502.html'), 502
@app.errorhandler(503)
def service_unavailable(error):
return render_template('503.html'), 503
@app.errorhandler(504)
def gateway_timeout(error):
return render_template('504.html'), 504
@app.errorhandler(404)
def not_found(error):
"""404 error handler"""
return render_template('404.html'), 404
@app.errorhandler(500)
def internal_error(error):
"""500 error handler"""
return render_template('500.html'), 500
if __name__ == '__main__':
# Build assets if in production
if not DEBUG_MODE:
try:
from build_assets import create_cache_busted_assets
create_cache_busted_assets()
except Exception as e:
print(f"Warning: Could not build assets: {e}")
# Run the application
port = int(os.environ.get('PORT', 5000))
app.run(host='0.0.0.0', port=port, debug=DEBUG_MODE)

143
build_assets.py Normal file
View File

@ -0,0 +1,143 @@
#!/usr/bin/env python3
"""
Asset build script for Kobelly's Base website
Handles CSS and JS minification with cache busting
"""
import os
import hashlib
import shutil
from datetime import datetime
from cssmin import cssmin
from jsmin import jsmin
def get_file_hash(filepath):
"""Generate MD5 hash of file content for cache busting"""
with open(filepath, 'rb') as f:
return hashlib.md5(f.read()).hexdigest()[:8]
def minify_css(input_file, output_file):
"""Minify CSS file"""
try:
with open(input_file, 'r', encoding='utf-8') as f:
css_content = f.read()
minified_css = cssmin(css_content)
with open(output_file, 'w', encoding='utf-8') as f:
f.write(minified_css)
print(f"✓ CSS minified: {input_file}{output_file}")
return True
except Exception as e:
print(f"✗ Error minifying CSS {input_file}: {e}")
return False
def minify_js(input_file, output_file):
"""Minify JavaScript file"""
try:
with open(input_file, 'r', encoding='utf-8') as f:
js_content = f.read()
minified_js = jsmin(js_content)
with open(output_file, 'w', encoding='utf-8') as f:
f.write(minified_js)
print(f"✓ JS minified: {input_file}{output_file}")
return True
except Exception as e:
print(f"✗ Error minifying JS {input_file}: {e}")
return False
def create_cache_busted_assets():
"""Create cache-busted versions of assets"""
static_dir = 'static'
css_dir = os.path.join(static_dir, 'css')
js_dir = os.path.join(static_dir, 'js')
# Ensure directories exist
os.makedirs(css_dir, exist_ok=True)
os.makedirs(js_dir, exist_ok=True)
# CSS files
css_files = [
('main.css', 'main.min.css')
]
# JS files
js_files = [
('main.js', 'main.min.js')
]
print("🔨 Building assets...")
print(f"📅 Build time: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
print()
# Process CSS files
for input_file, output_file in css_files:
input_path = os.path.join(css_dir, input_file)
output_path = os.path.join(css_dir, output_file)
if os.path.exists(input_path):
if minify_css(input_path, output_path):
# Generate cache-busted filename
file_hash = get_file_hash(output_path)
cache_busted_name = f"main.{file_hash}.min.css"
cache_busted_path = os.path.join(css_dir, cache_busted_name)
# Copy minified file to cache-busted version
shutil.copy2(output_path, cache_busted_path)
print(f"✓ Cache-busted CSS created: {cache_busted_name}")
else:
print(f"⚠️ CSS file not found: {input_path}")
print()
# Process JS files
for input_file, output_file in js_files:
input_path = os.path.join(js_dir, input_file)
output_path = os.path.join(js_dir, output_file)
if os.path.exists(input_path):
if minify_js(input_path, output_path):
# Generate cache-busted filename
file_hash = get_file_hash(output_path)
cache_busted_name = f"main.{file_hash}.min.js"
cache_busted_path = os.path.join(js_dir, cache_busted_name)
# Copy minified file to cache-busted version
shutil.copy2(output_path, cache_busted_path)
print(f"✓ Cache-busted JS created: {cache_busted_name}")
else:
print(f"⚠️ JS file not found: {input_path}")
print()
print("🎉 Asset build completed!")
def clean_old_assets():
"""Clean old cache-busted assets"""
static_dir = 'static'
css_dir = os.path.join(static_dir, 'css')
js_dir = os.path.join(static_dir, 'js')
# Remove old cache-busted files
for directory in [css_dir, js_dir]:
if os.path.exists(directory):
for filename in os.listdir(directory):
if filename.startswith('main.') and filename.endswith('.min.css') or filename.endswith('.min.js'):
if not filename in ['main.min.css', 'main.min.js']: # Keep the base minified files
filepath = os.path.join(directory, filename)
os.remove(filepath)
print(f"🗑️ Removed old asset: {filename}")
if __name__ == '__main__':
import sys
if len(sys.argv) > 1 and sys.argv[1] == 'clean':
print("🧹 Cleaning old assets...")
clean_old_assets()
print("✓ Cleanup completed!")
else:
clean_old_assets()
create_cache_busted_assets()

24
docker-compose.dev.yml Normal file
View File

@ -0,0 +1,24 @@
version: '3.8'
services:
web:
build: .
ports:
- "10333:5000"
environment:
- MAIL_SERVER=smtp.gmail.com
- MAIL_PORT=587
- MAIL_USE_TLS=True
- MAIL_USE_SSL=False
- MAIL_USERNAME=dev@example.com
- MAIL_PASSWORD=devpassword
- MAIL_DEFAULT_SENDER=dev@example.com
- SECRET_KEY=dev-secret-key-change-in-production
- FLASK_ENV=development
- FLASK_DEBUG=1
volumes:
- .:/app
restart: unless-stopped
networks:
- default
command: ["python", "-u", "app.py"]

26
docker-compose.yml Normal file
View File

@ -0,0 +1,26 @@
version: '3.8'
services:
web:
build: .
ports:
- "10332:5000"
environment:
- MAIL_SERVER=smtppro.zoho.eu
- MAIL_PORT=587
- MAIL_USE_TLS=True
- MAIL_USE_SSL=False
- MAIL_USERNAME=contact@kobelly.be
- MAIL_PASSWORD=Surface125300!?
- MAIL_DEFAULT_SENDER=contact@kobelly.be
- SECRET_KEY=AiDr591lSXZdVtp9UVV4WcBlae7bgu
- FLASK_ENV=production
- FLASK_DEBUG=0
restart: unless-stopped
networks:
- default
- nginx-proxy-manager_default
networks:
nginx-proxy-manager_default:
external: true

10
requirements.txt Normal file
View File

@ -0,0 +1,10 @@
Flask==2.3.3
Werkzeug==2.3.7
Flask-Assets==2.1.0
cssmin==0.2.0
jsmin==3.0.1
click==8.1.7
blinker==1.6.3
# Translation system - JSON-based, no compilation needed
# Email functionality
Flask-Mail==0.9.1

19
robots.txt Normal file
View File

@ -0,0 +1,19 @@
User-agent: *
Allow: /
# Sitemap location
Sitemap: https://kobelly.com/sitemap.xml
# Crawl delay (optional - be respectful to server)
Crawl-delay: 1
# Disallow admin areas (if any)
Disallow: /admin/
Disallow: /private/
Disallow: /temp/
# Allow important pages
Allow: /services/
Allow: /about/
Allow: /contact/
Allow: /portfolio/

399
static/css/main.css Normal file
View File

@ -0,0 +1,399 @@
/* Kobelly Base Website - Main CSS */
/* Custom Properties */
:root {
--primary-color: #0d6efd;
--secondary-color: #6c757d;
--success-color: #198754;
--info-color: #0dcaf0;
--warning-color: #ffc107;
--danger-color: #dc3545;
--light-color: #f8f9fa;
--dark-color: #212529;
--white-color: #ffffff;
--body-bg: #ffffff;
--text-color: #212529;
--text-muted: #6c757d;
--border-color: #dee2e6;
--shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
--shadow-lg: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
--border-radius: 0.375rem;
--border-radius-lg: 0.5rem;
--transition: all 0.15s ease-in-out;
}
/* Base Styles */
* {
box-sizing: border-box;
}
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
line-height: 1.6;
color: var(--text-color);
background-color: var(--body-bg);
}
/* Typography */
h1, h2, h3, h4, h5, h6 {
font-weight: 600;
line-height: 1.2;
margin-bottom: 0.5rem;
}
p {
margin-bottom: 1rem;
}
.lead {
font-size: 1.125rem;
font-weight: 300;
}
/* Navigation */
.navbar {
transition: var(--transition);
backdrop-filter: blur(10px);
background-color: rgba(255, 255, 255, 0.95) !important;
}
.navbar-brand {
font-size: 1.5rem;
font-weight: 700;
}
.nav-link {
font-weight: 500;
transition: var(--transition);
}
.nav-link:hover {
color: var(--primary-color) !important;
}
/* Hero Section */
.hero-section {
background: linear-gradient(135deg, var(--primary-color) 0%, #0056b3 100%);
min-height: 75vh;
display: flex;
align-items: center;
}
.min-vh-75 {
min-height: 75vh;
}
.hero-image {
animation: float 6s ease-in-out infinite;
}
@keyframes float {
0%, 100% { transform: translateY(0px); }
50% { transform: translateY(-20px); }
}
/* Cards */
.card {
transition: var(--transition);
border: none;
box-shadow: var(--shadow);
}
.card:hover {
transform: translateY(-5px);
box-shadow: var(--shadow-lg);
}
.card-body {
padding: 2rem;
}
/* Buttons */
.btn {
font-weight: 500;
border-radius: var(--border-radius);
transition: var(--transition);
padding: 0.75rem 1.5rem;
}
.btn-lg {
padding: 1rem 2rem;
font-size: 1.125rem;
}
.btn-primary {
background-color: var(--primary-color);
border-color: var(--primary-color);
}
.btn-primary:hover {
background-color: #0056b3;
border-color: #0056b3;
transform: translateY(-2px);
box-shadow: var(--shadow-lg);
}
.btn-outline-primary {
color: var(--primary-color);
border-color: var(--primary-color);
}
.btn-outline-primary:hover {
background-color: var(--primary-color);
border-color: var(--primary-color);
transform: translateY(-2px);
box-shadow: var(--shadow-lg);
}
.btn-light {
background-color: var(--white-color);
border-color: var(--white-color);
color: var(--text-color);
}
.btn-light:hover {
background-color: #f8f9fa;
border-color: #f8f9fa;
color: var(--text-color);
transform: translateY(-2px);
box-shadow: var(--shadow-lg);
}
/* Icons */
.feature-icon,
.service-icon,
.value-icon {
transition: var(--transition);
}
.feature-icon:hover,
.service-icon:hover,
.value-icon:hover {
transform: scale(1.1);
}
/* Process Steps */
.process-step {
transition: var(--transition);
}
.process-step:hover {
transform: scale(1.05);
}
/* Contact Form */
.form-control {
border-radius: var(--border-radius);
border: 1px solid var(--border-color);
padding: 0.75rem 1rem;
transition: var(--transition);
}
.form-control:focus {
border-color: var(--primary-color);
box-shadow: 0 0 0 0.2rem rgba(13, 110, 253, 0.25);
}
.form-label {
font-weight: 500;
margin-bottom: 0.5rem;
}
/* Alerts */
.alert {
border-radius: var(--border-radius);
border: none;
}
.alert-success {
background-color: #d1e7dd;
color: #0f5132;
}
.alert-danger {
background-color: #f8d7da;
color: #721c24;
}
/* Accordion */
.accordion-button {
font-weight: 500;
border-radius: var(--border-radius);
}
.accordion-button:not(.collapsed) {
background-color: var(--primary-color);
color: var(--white-color);
}
.accordion-button:focus {
box-shadow: 0 0 0 0.2rem rgba(13, 110, 253, 0.25);
}
/* Footer */
footer {
background: linear-gradient(135deg, var(--dark-color) 0%, #343a40 100%);
color: var(--white-color) !important;
}
footer .text-muted {
color: rgba(255, 255, 255, 0.7) !important;
}
footer a {
color: rgba(255, 255, 255, 0.8) !important;
}
footer a:hover {
color: var(--white-color) !important;
}
.social-links a {
transition: var(--transition);
display: inline-block;
}
.social-links a:hover {
transform: translateY(-3px);
color: var(--primary-color) !important;
}
/* Language Selector */
.dropdown-toggle {
border-radius: var(--border-radius);
font-weight: 500;
}
.dropdown-item {
transition: var(--transition);
}
.dropdown-item:hover {
background-color: var(--primary-color);
color: var(--white-color);
}
/* Responsive Design */
@media (max-width: 768px) {
.hero-section {
min-height: 60vh;
text-align: center;
}
.display-4 {
font-size: 2.5rem;
}
.display-6 {
font-size: 1.75rem;
}
.card-body {
padding: 1.5rem;
}
.btn-lg {
padding: 0.75rem 1.5rem;
font-size: 1rem;
}
}
@media (max-width: 576px) {
.hero-section {
min-height: 50vh;
}
.display-4 {
font-size: 2rem;
}
.display-6 {
font-size: 1.5rem;
}
.card-body {
padding: 1rem;
}
}
/* Animations */
.fade-in {
animation: fadeIn 0.6s ease-in;
}
@keyframes fadeIn {
from { opacity: 0; transform: translateY(20px); }
to { opacity: 1; transform: translateY(0); }
}
.slide-in-left {
animation: slideInLeft 0.6s ease-out;
}
@keyframes slideInLeft {
from { opacity: 0; transform: translateX(-30px); }
to { opacity: 1; transform: translateX(0); }
}
.slide-in-right {
animation: slideInRight 0.6s ease-out;
}
@keyframes slideInRight {
from { opacity: 0; transform: translateX(30px); }
to { opacity: 1; transform: translateX(0); }
}
/* Utility Classes */
.text-primary {
color: var(--primary-color) !important;
}
.bg-primary {
background-color: var(--primary-color) !important;
}
.border-primary {
border-color: var(--primary-color) !important;
}
.shadow-sm {
box-shadow: var(--shadow) !important;
}
.shadow {
box-shadow: var(--shadow-lg) !important;
}
/* Loading States */
.loading {
opacity: 0.6;
pointer-events: none;
}
/* Focus States */
.btn:focus,
.form-control:focus,
.accordion-button:focus {
outline: none;
box-shadow: 0 0 0 0.2rem rgba(13, 110, 253, 0.25);
}
/* Print Styles */
@media print {
.navbar,
.btn,
.social-links {
display: none !important;
}
body {
background: white !important;
color: black !important;
}
.card {
border: 1px solid #ccc !important;
box-shadow: none !important;
}
}

1
static/css/main.d1a4575d.min.css vendored Normal file

File diff suppressed because one or more lines are too long

1
static/css/main.min.css vendored Normal file

File diff suppressed because one or more lines are too long

18
static/js/main.cbb94d6d.min.js vendored Normal file
View File

@ -0,0 +1,18 @@
document.addEventListener('DOMContentLoaded',function(){'use strict';initNavbar();initAnimations();initFormValidation();initScrollEffects();initContactForm();initAccordion();initTooltips();initModals();console.log('Kobelly Base Website loaded successfully!');});function initNavbar(){const navbar=document.querySelector('.navbar');const navbarToggler=document.querySelector('.navbar-toggler');const navbarCollapse=document.querySelector('.navbar-collapse');window.addEventListener('scroll',function(){if(window.scrollY>50){navbar.classList.add('scrolled');}else{navbar.classList.remove('scrolled');}});const navLinks=document.querySelectorAll('.navbar-nav .nav-link');navLinks.forEach(link=>{link.addEventListener('click',function(){if(navbarCollapse.classList.contains('show')){navbarToggler.click();}});});}
function initAnimations(){const observerOptions={threshold:0.1,rootMargin:'0px 0px -50px 0px'};const observer=new IntersectionObserver(function(entries){entries.forEach(entry=>{if(entry.isIntersecting){entry.target.classList.add('fade-in');observer.unobserve(entry.target);}});},observerOptions);const animateElements=document.querySelectorAll('.card, .feature-icon, .service-icon, .value-icon');animateElements.forEach(el=>{observer.observe(el);});}
function initFormValidation(){const forms=document.querySelectorAll('form[data-validate]');forms.forEach(form=>{form.addEventListener('submit',function(e){if(!validateForm(form)){e.preventDefault();}});});}
function validateForm(form){let isValid=true;const inputs=form.querySelectorAll('input[required], textarea[required]');inputs.forEach(input=>{if(!input.value.trim()){showFieldError(input,'This field is required');isValid=false;}else if(input.type==='email'&&!isValidEmail(input.value)){showFieldError(input,'Please enter a valid email address');isValid=false;}else{clearFieldError(input);}});return isValid;}
function isValidEmail(email){const emailRegex=/^[^\s@]+@[^\s@]+\.[^\s@]+$/;return emailRegex.test(email);}
function showFieldError(input,message){clearFieldError(input);const errorDiv=document.createElement('div');errorDiv.className='invalid-feedback d-block';errorDiv.textContent=message;input.classList.add('is-invalid');input.parentNode.appendChild(errorDiv);}
function clearFieldError(input){input.classList.remove('is-invalid');const errorDiv=input.parentNode.querySelector('.invalid-feedback');if(errorDiv){errorDiv.remove();}}
function initScrollEffects(){const anchorLinks=document.querySelectorAll('a[href^="#"]');anchorLinks.forEach(link=>{link.addEventListener('click',function(e){e.preventDefault();const target=document.querySelector(this.getAttribute('href'));if(target){target.scrollIntoView({behavior:'smooth',block:'start'});}});});const backToTopBtn=document.createElement('button');backToTopBtn.innerHTML='<i class="bi bi-arrow-up"></i>';backToTopBtn.className='btn btn-primary position-fixed';backToTopBtn.style.cssText='bottom: 20px; right: 20px; z-index: 1000; display: none; border-radius: 50%; width: 50px; height: 50px;';backToTopBtn.setAttribute('aria-label','Back to top');document.body.appendChild(backToTopBtn);window.addEventListener('scroll',function(){if(window.scrollY>300){backToTopBtn.style.display='block';}else{backToTopBtn.style.display='none';}});backToTopBtn.addEventListener('click',function(){window.scrollTo({top:0,behavior:'smooth'});});}
function initContactForm(){const contactForm=document.querySelector('form[action*="contact"]');if(!contactForm)return;contactForm.addEventListener('submit',function(e){const submitBtn=this.querySelector('button[type="submit"]');const originalText=submitBtn.textContent;submitBtn.disabled=true;submitBtn.innerHTML='<span class="spinner-border spinner-border-sm me-2"></span>Sending...';submitBtn.classList.add('loading');});}
function initAccordion(){const accordionButtons=document.querySelectorAll('.accordion-button');accordionButtons.forEach(button=>{button.addEventListener('click',function(){const isExpanded=this.getAttribute('aria-expanded')==='true';const accordionCollapse=this.nextElementSibling;if(!isExpanded){accordionCollapse.classList.add('expanding');}
setTimeout(()=>{accordionCollapse.classList.remove('expanding');},300);});});}
function initTooltips(){const tooltipTriggerList=[].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));tooltipTriggerList.map(function(tooltipTriggerEl){return new bootstrap.Tooltip(tooltipTriggerEl);});}
function initModals(){const modalTriggerList=[].slice.call(document.querySelectorAll('[data-bs-toggle="modal"]'));modalTriggerList.map(function(modalTriggerEl){return new bootstrap.Modal(modalTriggerEl);});}
function debounce(func,wait){let timeout;return function executedFunction(...args){const later=()=>{clearTimeout(timeout);func(...args);};clearTimeout(timeout);timeout=setTimeout(later,wait);};}
function throttle(func,limit){let inThrottle;return function(){const args=arguments;const context=this;if(!inThrottle){func.apply(context,args);inThrottle=true;setTimeout(()=>inThrottle=false,limit);}};}
const optimizedScrollHandler=throttle(function(){},16);window.addEventListener('scroll',optimizedScrollHandler);window.addEventListener('error',function(e){console.error('JavaScript error:',e.error);});if('serviceWorker'in navigator){window.addEventListener('load',function(){navigator.serviceWorker.register('/sw.js').then(function(registration){console.log('ServiceWorker registration successful');}).catch(function(err){console.log('ServiceWorker registration failed');});});}
function initAccessibility(){const skipLink=document.createElement('a');skipLink.href='#main-content';skipLink.textContent='Skip to main content';skipLink.className='sr-only sr-only-focusable position-absolute';skipLink.style.cssText='top: 10px; left: 10px; z-index: 1001; padding: 10px; background: white; border: 1px solid #ccc;';document.body.insertBefore(skipLink,document.body.firstChild);const mainContent=document.querySelector('main');if(mainContent){mainContent.id='main-content';}}
initAccessibility();

291
static/js/main.js Normal file
View File

@ -0,0 +1,291 @@
// Kobelly Base Website - Main JavaScript
document.addEventListener('DOMContentLoaded', function() {
'use strict';
// Initialize all components
initNavbar();
initAnimations();
initFormValidation();
initScrollEffects();
initContactForm();
initAccordion();
initTooltips();
initModals();
console.log('Kobelly Base Website loaded successfully!');
});
// Navbar functionality
function initNavbar() {
const navbar = document.querySelector('.navbar');
const navbarToggler = document.querySelector('.navbar-toggler');
const navbarCollapse = document.querySelector('.navbar-collapse');
// Navbar scroll effect
window.addEventListener('scroll', function() {
if (window.scrollY > 50) {
navbar.classList.add('scrolled');
} else {
navbar.classList.remove('scrolled');
}
});
// Close mobile menu when clicking on a link
const navLinks = document.querySelectorAll('.navbar-nav .nav-link');
navLinks.forEach(link => {
link.addEventListener('click', function() {
if (navbarCollapse.classList.contains('show')) {
navbarToggler.click();
}
});
});
}
// Animation initialization
function initAnimations() {
// Intersection Observer for fade-in animations
const observerOptions = {
threshold: 0.1,
rootMargin: '0px 0px -50px 0px'
};
const observer = new IntersectionObserver(function(entries) {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('fade-in');
observer.unobserve(entry.target);
}
});
}, observerOptions);
// Observe elements for animation
const animateElements = document.querySelectorAll('.card, .feature-icon, .service-icon, .value-icon');
animateElements.forEach(el => {
observer.observe(el);
});
}
// Form validation
function initFormValidation() {
const forms = document.querySelectorAll('form[data-validate]');
forms.forEach(form => {
form.addEventListener('submit', function(e) {
if (!validateForm(form)) {
e.preventDefault();
}
});
});
}
function validateForm(form) {
let isValid = true;
const inputs = form.querySelectorAll('input[required], textarea[required]');
inputs.forEach(input => {
if (!input.value.trim()) {
showFieldError(input, 'This field is required');
isValid = false;
} else if (input.type === 'email' && !isValidEmail(input.value)) {
showFieldError(input, 'Please enter a valid email address');
isValid = false;
} else {
clearFieldError(input);
}
});
return isValid;
}
function isValidEmail(email) {
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
return emailRegex.test(email);
}
function showFieldError(input, message) {
clearFieldError(input);
const errorDiv = document.createElement('div');
errorDiv.className = 'invalid-feedback d-block';
errorDiv.textContent = message;
input.classList.add('is-invalid');
input.parentNode.appendChild(errorDiv);
}
function clearFieldError(input) {
input.classList.remove('is-invalid');
const errorDiv = input.parentNode.querySelector('.invalid-feedback');
if (errorDiv) {
errorDiv.remove();
}
}
// Scroll effects
function initScrollEffects() {
// Smooth scrolling for anchor links
const anchorLinks = document.querySelectorAll('a[href^="#"]');
anchorLinks.forEach(link => {
link.addEventListener('click', function(e) {
e.preventDefault();
const target = document.querySelector(this.getAttribute('href'));
if (target) {
target.scrollIntoView({
behavior: 'smooth',
block: 'start'
});
}
});
});
// Back to top button
const backToTopBtn = document.createElement('button');
backToTopBtn.innerHTML = '<i class="bi bi-arrow-up"></i>';
backToTopBtn.className = 'btn btn-primary position-fixed';
backToTopBtn.style.cssText = 'bottom: 20px; right: 20px; z-index: 1000; display: none; border-radius: 50%; width: 50px; height: 50px;';
backToTopBtn.setAttribute('aria-label', 'Back to top');
document.body.appendChild(backToTopBtn);
window.addEventListener('scroll', function() {
if (window.scrollY > 300) {
backToTopBtn.style.display = 'block';
} else {
backToTopBtn.style.display = 'none';
}
});
backToTopBtn.addEventListener('click', function() {
window.scrollTo({
top: 0,
behavior: 'smooth'
});
});
}
// Contact form handling
function initContactForm() {
const contactForm = document.querySelector('form[action*="contact"]');
if (!contactForm) return;
contactForm.addEventListener('submit', function(e) {
const submitBtn = this.querySelector('button[type="submit"]');
const originalText = submitBtn.textContent;
// Show loading state
submitBtn.disabled = true;
submitBtn.innerHTML = '<span class="spinner-border spinner-border-sm me-2"></span>Sending...';
submitBtn.classList.add('loading');
});
}
// Accordion functionality
function initAccordion() {
const accordionButtons = document.querySelectorAll('.accordion-button');
accordionButtons.forEach(button => {
button.addEventListener('click', function() {
const isExpanded = this.getAttribute('aria-expanded') === 'true';
// Add animation class
const accordionCollapse = this.nextElementSibling;
if (!isExpanded) {
accordionCollapse.classList.add('expanding');
}
// Remove animation class after transition
setTimeout(() => {
accordionCollapse.classList.remove('expanding');
}, 300);
});
});
}
// Tooltip initialization
function initTooltips() {
const tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
tooltipTriggerList.map(function(tooltipTriggerEl) {
return new bootstrap.Tooltip(tooltipTriggerEl);
});
}
// Modal initialization
function initModals() {
const modalTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="modal"]'));
modalTriggerList.map(function(modalTriggerEl) {
return new bootstrap.Modal(modalTriggerEl);
});
}
// Utility functions
function debounce(func, wait) {
let timeout;
return function executedFunction(...args) {
const later = () => {
clearTimeout(timeout);
func(...args);
};
clearTimeout(timeout);
timeout = setTimeout(later, wait);
};
}
function throttle(func, limit) {
let inThrottle;
return function() {
const args = arguments;
const context = this;
if (!inThrottle) {
func.apply(context, args);
inThrottle = true;
setTimeout(() => inThrottle = false, limit);
}
};
}
// Performance optimization
const optimizedScrollHandler = throttle(function() {
// Handle scroll events efficiently
}, 16); // ~60fps
window.addEventListener('scroll', optimizedScrollHandler);
// Error handling
window.addEventListener('error', function(e) {
console.error('JavaScript error:', e.error);
});
// Service Worker registration (for PWA features)
if ('serviceWorker' in navigator) {
window.addEventListener('load', function() {
navigator.serviceWorker.register('/sw.js')
.then(function(registration) {
console.log('ServiceWorker registration successful');
})
.catch(function(err) {
console.log('ServiceWorker registration failed');
});
});
}
// Accessibility improvements
function initAccessibility() {
// Skip to main content link
const skipLink = document.createElement('a');
skipLink.href = '#main-content';
skipLink.textContent = 'Skip to main content';
skipLink.className = 'sr-only sr-only-focusable position-absolute';
skipLink.style.cssText = 'top: 10px; left: 10px; z-index: 1001; padding: 10px; background: white; border: 1px solid #ccc;';
document.body.insertBefore(skipLink, document.body.firstChild);
// Add main content id
const mainContent = document.querySelector('main');
if (mainContent) {
mainContent.id = 'main-content';
}
}
// Initialize accessibility features
initAccessibility();

18
static/js/main.min.js vendored Normal file
View File

@ -0,0 +1,18 @@
document.addEventListener('DOMContentLoaded',function(){'use strict';initNavbar();initAnimations();initFormValidation();initScrollEffects();initContactForm();initAccordion();initTooltips();initModals();console.log('Kobelly Base Website loaded successfully!');});function initNavbar(){const navbar=document.querySelector('.navbar');const navbarToggler=document.querySelector('.navbar-toggler');const navbarCollapse=document.querySelector('.navbar-collapse');window.addEventListener('scroll',function(){if(window.scrollY>50){navbar.classList.add('scrolled');}else{navbar.classList.remove('scrolled');}});const navLinks=document.querySelectorAll('.navbar-nav .nav-link');navLinks.forEach(link=>{link.addEventListener('click',function(){if(navbarCollapse.classList.contains('show')){navbarToggler.click();}});});}
function initAnimations(){const observerOptions={threshold:0.1,rootMargin:'0px 0px -50px 0px'};const observer=new IntersectionObserver(function(entries){entries.forEach(entry=>{if(entry.isIntersecting){entry.target.classList.add('fade-in');observer.unobserve(entry.target);}});},observerOptions);const animateElements=document.querySelectorAll('.card, .feature-icon, .service-icon, .value-icon');animateElements.forEach(el=>{observer.observe(el);});}
function initFormValidation(){const forms=document.querySelectorAll('form[data-validate]');forms.forEach(form=>{form.addEventListener('submit',function(e){if(!validateForm(form)){e.preventDefault();}});});}
function validateForm(form){let isValid=true;const inputs=form.querySelectorAll('input[required], textarea[required]');inputs.forEach(input=>{if(!input.value.trim()){showFieldError(input,'This field is required');isValid=false;}else if(input.type==='email'&&!isValidEmail(input.value)){showFieldError(input,'Please enter a valid email address');isValid=false;}else{clearFieldError(input);}});return isValid;}
function isValidEmail(email){const emailRegex=/^[^\s@]+@[^\s@]+\.[^\s@]+$/;return emailRegex.test(email);}
function showFieldError(input,message){clearFieldError(input);const errorDiv=document.createElement('div');errorDiv.className='invalid-feedback d-block';errorDiv.textContent=message;input.classList.add('is-invalid');input.parentNode.appendChild(errorDiv);}
function clearFieldError(input){input.classList.remove('is-invalid');const errorDiv=input.parentNode.querySelector('.invalid-feedback');if(errorDiv){errorDiv.remove();}}
function initScrollEffects(){const anchorLinks=document.querySelectorAll('a[href^="#"]');anchorLinks.forEach(link=>{link.addEventListener('click',function(e){e.preventDefault();const target=document.querySelector(this.getAttribute('href'));if(target){target.scrollIntoView({behavior:'smooth',block:'start'});}});});const backToTopBtn=document.createElement('button');backToTopBtn.innerHTML='<i class="bi bi-arrow-up"></i>';backToTopBtn.className='btn btn-primary position-fixed';backToTopBtn.style.cssText='bottom: 20px; right: 20px; z-index: 1000; display: none; border-radius: 50%; width: 50px; height: 50px;';backToTopBtn.setAttribute('aria-label','Back to top');document.body.appendChild(backToTopBtn);window.addEventListener('scroll',function(){if(window.scrollY>300){backToTopBtn.style.display='block';}else{backToTopBtn.style.display='none';}});backToTopBtn.addEventListener('click',function(){window.scrollTo({top:0,behavior:'smooth'});});}
function initContactForm(){const contactForm=document.querySelector('form[action*="contact"]');if(!contactForm)return;contactForm.addEventListener('submit',function(e){const submitBtn=this.querySelector('button[type="submit"]');const originalText=submitBtn.textContent;submitBtn.disabled=true;submitBtn.innerHTML='<span class="spinner-border spinner-border-sm me-2"></span>Sending...';submitBtn.classList.add('loading');});}
function initAccordion(){const accordionButtons=document.querySelectorAll('.accordion-button');accordionButtons.forEach(button=>{button.addEventListener('click',function(){const isExpanded=this.getAttribute('aria-expanded')==='true';const accordionCollapse=this.nextElementSibling;if(!isExpanded){accordionCollapse.classList.add('expanding');}
setTimeout(()=>{accordionCollapse.classList.remove('expanding');},300);});});}
function initTooltips(){const tooltipTriggerList=[].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));tooltipTriggerList.map(function(tooltipTriggerEl){return new bootstrap.Tooltip(tooltipTriggerEl);});}
function initModals(){const modalTriggerList=[].slice.call(document.querySelectorAll('[data-bs-toggle="modal"]'));modalTriggerList.map(function(modalTriggerEl){return new bootstrap.Modal(modalTriggerEl);});}
function debounce(func,wait){let timeout;return function executedFunction(...args){const later=()=>{clearTimeout(timeout);func(...args);};clearTimeout(timeout);timeout=setTimeout(later,wait);};}
function throttle(func,limit){let inThrottle;return function(){const args=arguments;const context=this;if(!inThrottle){func.apply(context,args);inThrottle=true;setTimeout(()=>inThrottle=false,limit);}};}
const optimizedScrollHandler=throttle(function(){},16);window.addEventListener('scroll',optimizedScrollHandler);window.addEventListener('error',function(e){console.error('JavaScript error:',e.error);});if('serviceWorker'in navigator){window.addEventListener('load',function(){navigator.serviceWorker.register('/sw.js').then(function(registration){console.log('ServiceWorker registration successful');}).catch(function(err){console.log('ServiceWorker registration failed');});});}
function initAccessibility(){const skipLink=document.createElement('a');skipLink.href='#main-content';skipLink.textContent='Skip to main content';skipLink.className='sr-only sr-only-focusable position-absolute';skipLink.style.cssText='top: 10px; left: 10px; z-index: 1001; padding: 10px; background: white; border: 1px solid #ccc;';document.body.insertBefore(skipLink,document.body.firstChild);const mainContent=document.querySelector('main');if(mainContent){mainContent.id='main-content';}}
initAccessibility();

203
templates/about.html Normal file
View File

@ -0,0 +1,203 @@
{% extends "base.html" %}
{% block title %}{{ t('About') }} - {{ t('Your Business Name') }}{% endblock %}
{% block content %}
<!-- Page Header -->
<section class="bg-primary text-white py-5">
<div class="container">
<div class="row text-center">
<div class="col-lg-8 mx-auto">
<h1 class="display-4 fw-bold mb-3">{{ t('About Us') }}</h1>
<p class="lead">{{ t('Learn more about our company, our mission, and the team behind our success.') }}</p>
</div>
</div>
</div>
</section>
<!-- Company Story -->
<section class="py-5">
<div class="container">
<div class="row align-items-center">
<div class="col-lg-6">
<h2 class="display-6 fw-bold mb-4">{{ t('Our Story') }}</h2>
<p class="lead text-muted mb-4">{{ t('Founded with a vision to provide exceptional services and build lasting relationships with our clients.') }}</p>
<p class="mb-4">{{ t('We started as a small team with big dreams, determined to make a difference in the business world. Over the years, we have grown into a trusted partner for businesses of all sizes, helping them achieve their goals and overcome challenges.') }}</p>
<p class="mb-4">{{ t('Our commitment to quality, innovation, and customer satisfaction has remained at the core of everything we do. We believe in building long-term partnerships based on trust, transparency, and mutual success.') }}</p>
<div class="row g-3">
<div class="col-6">
<div class="text-center">
<h3 class="fw-bold text-primary">10+</h3>
<p class="text-muted mb-0">{{ t('Years Experience') }}</p>
</div>
</div>
<div class="col-6">
<div class="text-center">
<h3 class="fw-bold text-primary">500+</h3>
<p class="text-muted mb-0">{{ t('Happy Clients') }}</p>
</div>
</div>
</div>
</div>
<div class="col-lg-6 text-center">
<div class="about-image">
<i class="bi bi-building display-1 text-primary opacity-75"></i>
</div>
</div>
</div>
</div>
</section>
<!-- Mission & Values -->
<section class="bg-light py-5">
<div class="container">
<div class="row text-center mb-5">
<div class="col-lg-8 mx-auto">
<h2 class="display-6 fw-bold mb-3">{{ t('Our Mission & Values') }}</h2>
<p class="lead text-muted">{{ t('We are guided by our core values and committed to our mission of delivering excellence.') }}</p>
</div>
</div>
<div class="row g-4">
<div class="col-md-6">
<div class="card h-100 border-0 shadow-sm">
<div class="card-body text-center p-4">
<div class="value-icon mb-3">
<i class="bi bi-bullseye text-primary display-4"></i>
</div>
<h4 class="fw-bold mb-3">{{ t('Our Mission') }}</h4>
<p class="text-muted">{{ t('To provide innovative, reliable, and cost-effective solutions that empower businesses to achieve their full potential and drive sustainable growth in an ever-evolving market.') }}</p>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card h-100 border-0 shadow-sm">
<div class="card-body text-center p-4">
<div class="value-icon mb-3">
<i class="bi bi-eye text-primary display-4"></i>
</div>
<h4 class="fw-bold mb-3">{{ t('Our Vision') }}</h4>
<p class="text-muted">{{ t('To be the leading provider of business solutions, recognized for our expertise, integrity, and commitment to client success across all industries.') }}</p>
</div>
</div>
</div>
</div>
<div class="row g-4 mt-4">
<div class="col-md-4">
<div class="text-center p-4">
<div class="value-icon mb-3">
<i class="bi bi-award text-primary display-4"></i>
</div>
<h5 class="fw-bold">{{ t('Excellence') }}</h5>
<p class="text-muted">{{ t('We strive for excellence in everything we do, maintaining the highest standards of quality and professionalism.') }}</p>
</div>
</div>
<div class="col-md-4">
<div class="text-center p-4">
<div class="value-icon mb-3">
<i class="bi bi-heart text-primary display-4"></i>
</div>
<h5 class="fw-bold">{{ t('Integrity') }}</h5>
<p class="text-muted">{{ t('We conduct business with honesty, transparency, and ethical practices, building trust with our clients and partners.') }}</p>
</div>
</div>
<div class="col-md-4">
<div class="text-center p-4">
<div class="value-icon mb-3">
<i class="bi bi-lightbulb text-primary display-4"></i>
</div>
<h5 class="fw-bold">{{ t('Innovation') }}</h5>
<p class="text-muted">{{ t('We embrace new ideas and technologies to provide cutting-edge solutions that meet evolving business needs.') }}</p>
</div>
</div>
</div>
</div>
</section>
<!-- Team Section -->
<section class="py-5">
<div class="container">
<div class="row text-center mb-5">
<div class="col-lg-8 mx-auto">
<h2 class="display-6 fw-bold mb-3">{{ t('Our Team') }}</h2>
<p class="lead text-muted">{{ t('Meet the dedicated professionals who make our company successful.') }}</p>
</div>
</div>
<div class="row g-4">
<div class="col-md-6 col-lg-3">
<div class="card border-0 shadow-sm text-center">
<div class="card-body p-4">
<div class="team-member mb-3">
<div class="bg-light rounded-circle d-inline-flex align-items-center justify-content-center" style="width: 120px; height: 120px;">
<i class="bi bi-person text-primary display-4"></i>
</div>
</div>
<h5 class="fw-bold">{{ t('John Doe') }}</h5>
<p class="text-muted mb-2">{{ t('CEO & Founder') }}</p>
<p class="small text-muted">{{ t('Experienced leader with a passion for innovation and business growth.') }}</p>
</div>
</div>
</div>
<div class="col-md-6 col-lg-3">
<div class="card border-0 shadow-sm text-center">
<div class="card-body p-4">
<div class="team-member mb-3">
<div class="bg-light rounded-circle d-inline-flex align-items-center justify-content-center" style="width: 120px; height: 120px;">
<i class="bi bi-person text-primary display-4"></i>
</div>
</div>
<h5 class="fw-bold">{{ t('Jane Smith') }}</h5>
<p class="text-muted mb-2">{{ t('Operations Manager') }}</p>
<p class="small text-muted">{{ t('Dedicated professional ensuring smooth operations and client satisfaction.') }}</p>
</div>
</div>
</div>
<div class="col-md-6 col-lg-3">
<div class="card border-0 shadow-sm text-center">
<div class="card-body p-4">
<div class="team-member mb-3">
<div class="bg-light rounded-circle d-inline-flex align-items-center justify-content-center" style="width: 120px; height: 120px;">
<i class="bi bi-person text-primary display-4"></i>
</div>
</div>
<h5 class="fw-bold">{{ t('Mike Johnson') }}</h5>
<p class="text-muted mb-2">{{ t('Technical Lead') }}</p>
<p class="small text-muted">{{ t('Expert in technical solutions and innovative problem-solving approaches.') }}</p>
</div>
</div>
</div>
<div class="col-md-6 col-lg-3">
<div class="card border-0 shadow-sm text-center">
<div class="card-body p-4">
<div class="team-member mb-3">
<div class="bg-light rounded-circle d-inline-flex align-items-center justify-content-center" style="width: 120px; height: 120px;">
<i class="bi bi-person text-primary display-4"></i>
</div>
</div>
<h5 class="fw-bold">{{ t('Sarah Wilson') }}</h5>
<p class="text-muted mb-2">{{ t('Client Relations') }}</p>
<p class="small text-muted">{{ t('Committed to building strong relationships and ensuring client success.') }}</p>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- CTA Section -->
<section class="bg-primary text-white py-5">
<div class="container text-center">
<h2 class="display-6 fw-bold mb-4">{{ t('Ready to Work With Us?') }}</h2>
<p class="lead mb-4">{{ t('Let us help you achieve your business goals with our professional services and dedicated support.') }}</p>
<a href="{{ url_for('contact') }}" class="btn btn-light btn-lg">{{ t('Get Started Today') }}</a>
</div>
</section>
{% endblock %}

149
templates/base.html Normal file
View File

@ -0,0 +1,149 @@
<!DOCTYPE html>
<html lang="{{ get_current_language() }}">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="{{ t('Professional business website with modern design and excellent service') }}">
<meta name="keywords" content="{{ t('business, services, professional, quality') }}">
<meta name="author" content="{{ t('Your Business Name') }}">
<!-- Open Graph / Facebook -->
<meta property="og:type" content="website">
<meta property="og:url" content="{{ request.url }}">
<meta property="og:title" content="{{ t('Your Business Name') }} - {{ t('Professional Services') }}">
<meta property="og:description" content="{{ t('Professional business website with modern design and excellent service') }}">
<meta property="og:image" content="{{ url_for('static', filename='images/og-image.jpg') }}">
<!-- Twitter -->
<meta property="twitter:card" content="summary_large_image">
<meta property="twitter:url" content="{{ request.url }}">
<meta property="twitter:title" content="{{ t('Your Business Name') }} - {{ t('Professional Services') }}">
<meta property="twitter:description" content="{{ t('Professional business website with modern design and excellent service') }}">
<meta property="twitter:image" content="{{ url_for('static', filename='images/og-image.jpg') }}">
<title>{% block title %}{{ t('Your Business Name') }}{% endblock %}</title>
<!-- Bootstrap 5 CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- Bootstrap Icons -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.0/font/bootstrap-icons.css" rel="stylesheet">
<!-- Custom CSS -->
<link href="{{ get_asset_url('main.css', 'css') }}" rel="stylesheet">
<!-- Favicon -->
<link rel="icon" type="image/x-icon" href="{{ url_for('static', filename='images/favicon.ico') }}">
{% block extra_head %}{% endblock %}
</head>
<body>
<!-- Navigation -->
<nav class="navbar navbar-expand-lg navbar-light bg-white shadow-sm fixed-top">
<div class="container">
<a class="navbar-brand fw-bold" href="{{ url_for('index') }}">
<i class="bi bi-building me-2"></i>
{{ t('Your Business Name') }}
</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav me-auto">
<li class="nav-item">
<a class="nav-link" href="{{ url_for('index') }}">{{ t('Home') }}</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ url_for('services') }}">{{ t('Services') }}</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ url_for('about') }}">{{ t('About') }}</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ url_for('contact') }}">{{ t('Contact') }}</a>
</li>
</ul>
<!-- Language Selector -->
<div class="navbar-nav">
<div class="dropdown">
<button class="btn btn-outline-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown">
<i class="bi bi-globe"></i>
{{ get_current_language().upper() }}
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="{{ url_for('set_language_route', lang='en') }}">🇺🇸 English</a></li>
<li><a class="dropdown-item" href="{{ url_for('set_language_route', lang='de') }}">🇩🇪 Deutsch</a></li>
<li><a class="dropdown-item" href="{{ url_for('set_language_route', lang='fr') }}">🇫🇷 Français</a></li>
<li><a class="dropdown-item" href="{{ url_for('set_language_route', lang='nl') }}">🇳🇱 Nederlands</a></li>
</ul>
</div>
</div>
</div>
</div>
</nav>
<!-- Main Content -->
<main class="pt-5">
{% block content %}{% endblock %}
</main>
<!-- Footer -->
<footer class="bg-dark text-light py-5 mt-5">
<div class="container">
<div class="row">
<div class="col-lg-4 mb-4">
<h5 class="mb-3">{{ t('Your Business Name') }}</h5>
<p class="text-muted">{{ t('Professional services with quality and reliability. We are committed to delivering excellence in everything we do.') }}</p>
<div class="social-links">
<a href="#" class="text-light me-3"><i class="bi bi-facebook"></i></a>
<a href="#" class="text-light me-3"><i class="bi bi-twitter"></i></a>
<a href="#" class="text-light me-3"><i class="bi bi-linkedin"></i></a>
<a href="#" class="text-light"><i class="bi bi-instagram"></i></a>
</div>
</div>
<div class="col-lg-4 mb-4">
<h5 class="mb-3">{{ t('Quick Links') }}</h5>
<ul class="list-unstyled">
<li><a href="{{ url_for('index') }}" class="text-muted text-decoration-none">{{ t('Home') }}</a></li>
<li><a href="{{ url_for('services') }}" class="text-muted text-decoration-none">{{ t('Services') }}</a></li>
<li><a href="{{ url_for('about') }}" class="text-muted text-decoration-none">{{ t('About') }}</a></li>
<li><a href="{{ url_for('contact') }}" class="text-muted text-decoration-none">{{ t('Contact') }}</a></li>
</ul>
</div>
<div class="col-lg-4 mb-4">
<h5 class="mb-3">{{ t('Contact Info') }}</h5>
<ul class="list-unstyled text-muted">
<li><i class="bi bi-geo-alt me-2"></i>{{ t('123 Business Street, City, Country') }}</li>
<li><i class="bi bi-telephone me-2"></i>+1 234 567 890</li>
<li><i class="bi bi-envelope me-2"></i>info@yourbusiness.com</li>
</ul>
</div>
</div>
<hr class="my-4">
<div class="row align-items-center">
<div class="col-md-6">
<p class="mb-0 text-muted">&copy; {{ current_year }} {{ t('Your Business Name') }}. {{ t('All rights reserved.') }}</p>
</div>
<div class="col-md-6 text-md-end">
<p class="mb-0 text-muted">
<a href="#" class="text-muted text-decoration-none me-3">{{ t('Privacy Policy') }}</a>
<a href="#" class="text-muted text-decoration-none">{{ t('Terms of Service') }}</a>
</p>
</div>
</div>
</div>
</footer>
<!-- Bootstrap 5 JS -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
<!-- Custom JS -->
<script src="{{ get_asset_url('main.js', 'js') }}"></script>
{% block extra_scripts %}{% endblock %}
</body>
</html>

216
templates/contact.html Normal file
View File

@ -0,0 +1,216 @@
{% extends "base.html" %}
{% block title %}{{ t('Contact') }} - {{ t('Your Business Name') }}{% endblock %}
{% block content %}
<!-- Page Header -->
<section class="bg-primary text-white py-5">
<div class="container">
<div class="row text-center">
<div class="col-lg-8 mx-auto">
<h1 class="display-4 fw-bold mb-3">{{ t('Contact Us') }}</h1>
<p class="lead">{{ t('Get in touch with us today. We are here to help you with all your business needs.') }}</p>
</div>
</div>
</div>
</section>
<!-- Contact Information -->
<section class="py-5">
<div class="container">
<div class="row g-5">
<!-- Contact Form -->
<div class="col-lg-8">
<div class="card border-0 shadow-sm">
<div class="card-body p-4">
<h3 class="fw-bold mb-4">{{ t('Send Us a Message') }}</h3>
{% with messages = get_flashed_messages(with_categories=true) %}
{% if messages %}
{% for category, message in messages %}
<div class="alert alert-{{ 'danger' if category == 'error' else 'success' }} alert-dismissible fade show" role="alert">
{{ message }}
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
</div>
{% endfor %}
{% endif %}
{% endwith %}
<form method="POST" action="{{ url_for('contact_submit') }}">
<div class="row g-3">
<div class="col-md-6">
<label for="name" class="form-label">{{ t('Full Name') }} *</label>
<input type="text" class="form-control" id="name" name="name" required>
</div>
<div class="col-md-6">
<label for="email" class="form-label">{{ t('Email Address') }} *</label>
<input type="email" class="form-control" id="email" name="email" required>
</div>
<div class="col-12">
<label for="subject" class="form-label">{{ t('Subject') }} *</label>
<input type="text" class="form-control" id="subject" name="subject" required>
</div>
<div class="col-12">
<label for="message" class="form-label">{{ t('Message') }} *</label>
<textarea class="form-control" id="message" name="message" rows="5" required></textarea>
</div>
<div class="col-12">
<button type="submit" class="btn btn-primary btn-lg">{{ t('Send Message') }}</button>
</div>
</div>
</form>
</div>
</div>
</div>
<!-- Contact Information -->
<div class="col-lg-4">
<div class="card border-0 shadow-sm h-100">
<div class="card-body p-4">
<h3 class="fw-bold mb-4">{{ t('Get in Touch') }}</h3>
<div class="contact-info">
<div class="d-flex align-items-start mb-4">
<div class="contact-icon me-3">
<i class="bi bi-geo-alt text-primary fs-4"></i>
</div>
<div>
<h6 class="fw-bold mb-1">{{ t('Address') }}</h6>
<p class="text-muted mb-0">{{ t('123 Business Street') }}<br>{{ t('City, State 12345') }}<br>{{ t('Country') }}</p>
</div>
</div>
<div class="d-flex align-items-start mb-4">
<div class="contact-icon me-3">
<i class="bi bi-telephone text-primary fs-4"></i>
</div>
<div>
<h6 class="fw-bold mb-1">{{ t('Phone') }}</h6>
<p class="text-muted mb-0">+1 234 567 890</p>
</div>
</div>
<div class="d-flex align-items-start mb-4">
<div class="contact-icon me-3">
<i class="bi bi-envelope text-primary fs-4"></i>
</div>
<div>
<h6 class="fw-bold mb-1">{{ t('Email') }}</h6>
<p class="text-muted mb-0">info@yourbusiness.com</p>
</div>
</div>
<div class="d-flex align-items-start mb-4">
<div class="contact-icon me-3">
<i class="bi bi-clock text-primary fs-4"></i>
</div>
<div>
<h6 class="fw-bold mb-1">{{ t('Business Hours') }}</h6>
<p class="text-muted mb-0">{{ t('Monday - Friday') }}<br>{{ t('9:00 AM - 6:00 PM') }}<br>{{ t('Saturday') }}<br>{{ t('10:00 AM - 4:00 PM') }}</p>
</div>
</div>
</div>
<hr class="my-4">
<h6 class="fw-bold mb-3">{{ t('Follow Us') }}</h6>
<div class="social-links">
<a href="#" class="btn btn-outline-primary me-2"><i class="bi bi-facebook"></i></a>
<a href="#" class="btn btn-outline-primary me-2"><i class="bi bi-twitter"></i></a>
<a href="#" class="btn btn-outline-primary me-2"><i class="bi bi-linkedin"></i></a>
<a href="#" class="btn btn-outline-primary"><i class="bi bi-instagram"></i></a>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- FAQ Section -->
<section class="bg-light py-5">
<div class="container">
<div class="row text-center mb-5">
<div class="col-lg-8 mx-auto">
<h2 class="display-6 fw-bold mb-3">{{ t('Frequently Asked Questions') }}</h2>
<p class="lead text-muted">{{ t('Find answers to common questions about our services and processes.') }}</p>
</div>
</div>
<div class="row g-4">
<div class="col-lg-6">
<div class="accordion" id="faqAccordion">
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#faq1">
{{ t('What services do you offer?') }}
</button>
</h2>
<div id="faq1" class="accordion-collapse collapse show" data-bs-parent="#faqAccordion">
<div class="accordion-body">
{{ t('We offer a comprehensive range of professional services including consulting, implementation, support, and specialized solutions tailored to meet your specific business needs.') }}
</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#faq2">
{{ t('How long does a typical project take?') }}
</button>
</h2>
<div id="faq2" class="accordion-collapse collapse" data-bs-parent="#faqAccordion">
<div class="accordion-body">
{{ t('Project timelines vary depending on the scope and complexity. We typically complete projects within 2-8 weeks, but we always provide detailed timelines during our initial consultation.') }}
</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#faq3">
{{ t('Do you provide ongoing support?') }}
</button>
</h2>
<div id="faq3" class="accordion-collapse collapse" data-bs-parent="#faqAccordion">
<div class="accordion-body">
{{ t('Yes, we provide comprehensive ongoing support and maintenance services to ensure your continued success and satisfaction with our solutions.') }}
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-6">
<div class="card border-0 shadow-sm h-100">
<div class="card-body p-4">
<h4 class="fw-bold mb-4">{{ t('Why Choose Us?') }}</h4>
<ul class="list-unstyled">
<li class="mb-3">
<i class="bi bi-check-circle text-success me-2"></i>
<strong>{{ t('Experience') }}:</strong> {{ t('Years of industry experience and expertise') }}
</li>
<li class="mb-3">
<i class="bi bi-check-circle text-success me-2"></i>
<strong>{{ t('Quality') }}:</strong> {{ t('Commitment to delivering high-quality solutions') }}
</li>
<li class="mb-3">
<i class="bi bi-check-circle text-success me-2"></i>
<strong>{{ t('Support') }}:</strong> {{ t('Dedicated customer support and maintenance') }}
</li>
<li class="mb-3">
<i class="bi bi-check-circle text-success me-2"></i>
<strong>{{ t('Flexibility') }}:</strong> {{ t('Customized solutions to meet your specific needs') }}
</li>
<li class="mb-3">
<i class="bi bi-check-circle text-success me-2"></i>
<strong>{{ t('Reliability') }}:</strong> {{ t('Proven track record of successful project delivery') }}
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</section>
{% endblock %}

18
templates/errors/400.html Normal file
View File

@ -0,0 +1,18 @@
{% extends "base.html" %}
{% block title %}{{ t('Bad Request') }} - {{ t('Your Business Name') }}{% endblock %}
{% block content %}
<section class="py-5">
<div class="container text-center">
<div class="row justify-content-center">
<div class="col-lg-8">
<div class="error-page">
<h1 class="display-1 fw-bold text-muted">400</h1>
<h2 class="display-6 fw-bold mb-4">{{ t('Bad Request') }}</h2>
<p class="lead text-muted mb-4">{{ t('The server could not understand your request. Please check your input and try again.') }}</p>
<a href="{{ url_for('index') }}" class="btn btn-primary btn-lg">{{ t('Go to Homepage') }}</a>
</div>
</div>
</div>
</div>
</section>
{% endblock %}

18
templates/errors/401.html Normal file
View File

@ -0,0 +1,18 @@
{% extends "base.html" %}
{% block title %}{{ t('Unauthorized') }} - {{ t('Your Business Name') }}{% endblock %}
{% block content %}
<section class="py-5">
<div class="container text-center">
<div class="row justify-content-center">
<div class="col-lg-8">
<div class="error-page">
<h1 class="display-1 fw-bold text-muted">401</h1>
<h2 class="display-6 fw-bold mb-4">{{ t('Unauthorized') }}</h2>
<p class="lead text-muted mb-4">{{ t('You are not authorized to view this page. Please log in or contact support if you believe this is an error.') }}</p>
<a href="{{ url_for('index') }}" class="btn btn-primary btn-lg">{{ t('Go to Homepage') }}</a>
</div>
</div>
</div>
</div>
</section>
{% endblock %}

18
templates/errors/403.html Normal file
View File

@ -0,0 +1,18 @@
{% extends "base.html" %}
{% block title %}{{ t('Forbidden') }} - {{ t('Your Business Name') }}{% endblock %}
{% block content %}
<section class="py-5">
<div class="container text-center">
<div class="row justify-content-center">
<div class="col-lg-8">
<div class="error-page">
<h1 class="display-1 fw-bold text-muted">403</h1>
<h2 class="display-6 fw-bold mb-4">{{ t('Forbidden') }}</h2>
<p class="lead text-muted mb-4">{{ t('You do not have permission to access this page.') }}</p>
<a href="{{ url_for('index') }}" class="btn btn-primary btn-lg">{{ t('Go to Homepage') }}</a>
</div>
</div>
</div>
</div>
</section>
{% endblock %}

23
templates/errors/404.html Normal file
View File

@ -0,0 +1,23 @@
{% extends "base.html" %}
{% block title %}{{ t('Page Not Found') }} - {{ t('Your Business Name') }}{% endblock %}
{% block content %}
<section class="py-5">
<div class="container text-center">
<div class="row justify-content-center">
<div class="col-lg-8">
<div class="error-page">
<h1 class="display-1 fw-bold text-muted">404</h1>
<h2 class="display-6 fw-bold mb-4">{{ t('Page Not Found') }}</h2>
<p class="lead text-muted mb-4">{{ t('The page you are looking for might have been removed, had its name changed, or is temporarily unavailable.') }}</p>
<div class="d-flex flex-wrap justify-content-center gap-3">
<a href="{{ url_for('index') }}" class="btn btn-primary btn-lg">{{ t('Go to Homepage') }}</a>
<a href="{{ url_for('contact') }}" class="btn btn-outline-primary btn-lg">{{ t('Contact Us') }}</a>
</div>
</div>
</div>
</div>
</div>
</section>
{% endblock %}

18
templates/errors/405.html Normal file
View File

@ -0,0 +1,18 @@
{% extends "base.html" %}
{% block title %}{{ t('Method Not Allowed') }} - {{ t('Your Business Name') }}{% endblock %}
{% block content %}
<section class="py-5">
<div class="container text-center">
<div class="row justify-content-center">
<div class="col-lg-8">
<div class="error-page">
<h1 class="display-1 fw-bold text-muted">405</h1>
<h2 class="display-6 fw-bold mb-4">{{ t('Method Not Allowed') }}</h2>
<p class="lead text-muted mb-4">{{ t('The method used for this request is not allowed.') }}</p>
<a href="{{ url_for('index') }}" class="btn btn-primary btn-lg">{{ t('Go to Homepage') }}</a>
</div>
</div>
</div>
</div>
</section>
{% endblock %}

23
templates/errors/500.html Normal file
View File

@ -0,0 +1,23 @@
{% extends "base.html" %}
{% block title %}{{ t('Server Error') }} - {{ t('Your Business Name') }}{% endblock %}
{% block content %}
<section class="py-5">
<div class="container text-center">
<div class="row justify-content-center">
<div class="col-lg-8">
<div class="error-page">
<h1 class="display-1 fw-bold text-muted">500</h1>
<h2 class="display-6 fw-bold mb-4">{{ t('Server Error') }}</h2>
<p class="lead text-muted mb-4">{{ t('Something went wrong on our end. We are working to fix the issue. Please try again later.') }}</p>
<div class="d-flex flex-wrap justify-content-center gap-3">
<a href="{{ url_for('index') }}" class="btn btn-primary btn-lg">{{ t('Go to Homepage') }}</a>
<a href="{{ url_for('contact') }}" class="btn btn-outline-primary btn-lg">{{ t('Contact Support') }}</a>
</div>
</div>
</div>
</div>
</div>
</section>
{% endblock %}

18
templates/errors/502.html Normal file
View File

@ -0,0 +1,18 @@
{% extends "base.html" %}
{% block title %}{{ t('Bad Gateway') }} - {{ t('Your Business Name') }}{% endblock %}
{% block content %}
<section class="py-5">
<div class="container text-center">
<div class="row justify-content-center">
<div class="col-lg-8">
<div class="error-page">
<h1 class="display-1 fw-bold text-muted">502</h1>
<h2 class="display-6 fw-bold mb-4">{{ t('Bad Gateway') }}</h2>
<p class="lead text-muted mb-4">{{ t('The server received an invalid response from the upstream server.') }}</p>
<a href="{{ url_for('index') }}" class="btn btn-primary btn-lg">{{ t('Go to Homepage') }}</a>
</div>
</div>
</div>
</div>
</section>
{% endblock %}

18
templates/errors/503.html Normal file
View File

@ -0,0 +1,18 @@
{% extends "base.html" %}
{% block title %}{{ t('Service Unavailable') }} - {{ t('Your Business Name') }}{% endblock %}
{% block content %}
<section class="py-5">
<div class="container text-center">
<div class="row justify-content-center">
<div class="col-lg-8">
<div class="error-page">
<h1 class="display-1 fw-bold text-muted">503</h1>
<h2 class="display-6 fw-bold mb-4">{{ t('Service Unavailable') }}</h2>
<p class="lead text-muted mb-4">{{ t('The server is currently unavailable. Please try again later.') }}</p>
<a href="{{ url_for('index') }}" class="btn btn-primary btn-lg">{{ t('Go to Homepage') }}</a>
</div>
</div>
</div>
</div>
</section>
{% endblock %}

18
templates/errors/504.html Normal file
View File

@ -0,0 +1,18 @@
{% extends "base.html" %}
{% block title %}{{ t('Gateway Timeout') }} - {{ t('Your Business Name') }}{% endblock %}
{% block content %}
<section class="py-5">
<div class="container text-center">
<div class="row justify-content-center">
<div class="col-lg-8">
<div class="error-page">
<h1 class="display-1 fw-bold text-muted">504</h1>
<h2 class="display-6 fw-bold mb-4">{{ t('Gateway Timeout') }}</h2>
<p class="lead text-muted mb-4">{{ t('The server did not receive a timely response from the upstream server.') }}</p>
<a href="{{ url_for('index') }}" class="btn btn-primary btn-lg">{{ t('Go to Homepage') }}</a>
</div>
</div>
</div>
</div>
</section>
{% endblock %}

165
templates/index.html Normal file
View File

@ -0,0 +1,165 @@
{% extends "base.html" %}
{% block title %}{{ t('Your Business Name') }} - {{ t('Professional Services') }}{% endblock %}
{% block content %}
<!-- Hero Section -->
<section class="hero-section bg-primary text-white py-5">
<div class="container">
<div class="row align-items-center min-vh-75">
<div class="col-lg-6">
<h1 class="display-4 fw-bold mb-4">{{ t('Professional Solutions for Your Business') }}</h1>
<p class="lead mb-4">{{ t('We provide high-quality services tailored to meet your business needs. Our experienced team is dedicated to delivering exceptional results.') }}</p>
<div class="d-flex flex-wrap gap-3">
<a href="{{ url_for('services') }}" class="btn btn-light btn-lg">{{ t('Our Services') }}</a>
<a href="{{ url_for('contact') }}" class="btn btn-outline-light btn-lg">{{ t('Get Started') }}</a>
</div>
</div>
<div class="col-lg-6 text-center">
<div class="hero-image">
<i class="bi bi-building display-1 text-light opacity-75"></i>
</div>
</div>
</div>
</div>
</section>
<!-- Features Section -->
<section class="py-5">
<div class="container">
<div class="row text-center mb-5">
<div class="col-lg-8 mx-auto">
<h2 class="display-6 fw-bold mb-3">{{ t('Why Choose Us') }}</h2>
<p class="lead text-muted">{{ t('We offer comprehensive solutions with a focus on quality, reliability, and customer satisfaction.') }}</p>
</div>
</div>
<div class="row g-4">
<div class="col-md-6 col-lg-3">
<div class="text-center p-4">
<div class="feature-icon mb-3">
<i class="bi bi-award text-primary display-4"></i>
</div>
<h5 class="fw-bold">{{ t('Quality Service') }}</h5>
<p class="text-muted">{{ t('We maintain the highest standards in all our services to ensure your complete satisfaction.') }}</p>
</div>
</div>
<div class="col-md-6 col-lg-3">
<div class="text-center p-4">
<div class="feature-icon mb-3">
<i class="bi bi-clock text-primary display-4"></i>
</div>
<h5 class="fw-bold">{{ t('Timely Delivery') }}</h5>
<p class="text-muted">{{ t('We understand the importance of deadlines and always deliver our services on time.') }}</p>
</div>
</div>
<div class="col-md-6 col-lg-3">
<div class="text-center p-4">
<div class="feature-icon mb-3">
<i class="bi bi-people text-primary display-4"></i>
</div>
<h5 class="fw-bold">{{ t('Expert Team') }}</h5>
<p class="text-muted">{{ t('Our experienced professionals are dedicated to providing the best solutions for your business.') }}</p>
</div>
</div>
<div class="col-md-6 col-lg-3">
<div class="text-center p-4">
<div class="feature-icon mb-3">
<i class="bi bi-heart text-primary display-4"></i>
</div>
<h5 class="fw-bold">{{ t('Customer Focus') }}</h5>
<p class="text-muted">{{ t('Your success is our priority. We work closely with you to understand your specific needs.') }}</p>
</div>
</div>
</div>
</div>
</section>
<!-- Services Preview Section -->
<section class="bg-light py-5">
<div class="container">
<div class="row text-center mb-5">
<div class="col-lg-8 mx-auto">
<h2 class="display-6 fw-bold mb-3">{{ t('Our Services') }}</h2>
<p class="lead text-muted">{{ t('Discover our comprehensive range of professional services designed to help your business grow.') }}</p>
</div>
</div>
<div class="row g-4">
<div class="col-md-6 col-lg-4">
<div class="card h-100 border-0 shadow-sm">
<div class="card-body text-center p-4">
<div class="service-icon mb-3">
<i class="bi bi-gear text-primary display-4"></i>
</div>
<h5 class="card-title fw-bold">{{ t('Service 1') }}</h5>
<p class="card-text text-muted">{{ t('Professional service description that highlights the key benefits and features of this offering.') }}</p>
<a href="{{ url_for('services') }}" class="btn btn-outline-primary">{{ t('Learn More') }}</a>
</div>
</div>
</div>
<div class="col-md-6 col-lg-4">
<div class="card h-100 border-0 shadow-sm">
<div class="card-body text-center p-4">
<div class="service-icon mb-3">
<i class="bi bi-graph-up text-primary display-4"></i>
</div>
<h5 class="card-title fw-bold">{{ t('Service 2') }}</h5>
<p class="card-text text-muted">{{ t('Comprehensive solution that addresses specific business challenges and delivers measurable results.') }}</p>
<a href="{{ url_for('services') }}" class="btn btn-outline-primary">{{ t('Learn More') }}</a>
</div>
</div>
</div>
<div class="col-md-6 col-lg-4">
<div class="card h-100 border-0 shadow-sm">
<div class="card-body text-center p-4">
<div class="service-icon mb-3">
<i class="bi bi-shield-check text-primary display-4"></i>
</div>
<h5 class="card-title fw-bold">{{ t('Service 3') }}</h5>
<p class="card-text text-muted">{{ t('Reliable and secure service that provides peace of mind and protects your business interests.') }}</p>
<a href="{{ url_for('services') }}" class="btn btn-outline-primary">{{ t('Learn More') }}</a>
</div>
</div>
</div>
</div>
<div class="text-center mt-5">
<a href="{{ url_for('services') }}" class="btn btn-primary btn-lg">{{ t('View All Services') }}</a>
</div>
</div>
</section>
<!-- About Preview Section -->
<section class="py-5">
<div class="container">
<div class="row align-items-center">
<div class="col-lg-6">
<h2 class="display-6 fw-bold mb-4">{{ t('About Our Company') }}</h2>
<p class="lead text-muted mb-4">{{ t('We are a dedicated team of professionals committed to delivering exceptional services and building long-term relationships with our clients.') }}</p>
<p class="mb-4">{{ t('With years of experience in the industry, we understand the unique challenges that businesses face and provide tailored solutions to help them succeed.') }}</p>
<a href="{{ url_for('about') }}" class="btn btn-primary">{{ t('Learn More About Us') }}</a>
</div>
<div class="col-lg-6 text-center">
<div class="about-image">
<i class="bi bi-building display-1 text-primary opacity-75"></i>
</div>
</div>
</div>
</div>
</section>
<!-- CTA Section -->
<section class="bg-primary text-white py-5">
<div class="container text-center">
<h2 class="display-6 fw-bold mb-4">{{ t('Ready to Get Started?') }}</h2>
<p class="lead mb-4">{{ t('Contact us today to discuss your needs and discover how we can help your business grow.') }}</p>
<a href="{{ url_for('contact') }}" class="btn btn-light btn-lg">{{ t('Contact Us Now') }}</a>
</div>
</section>
{% endblock %}

205
templates/services.html Normal file
View File

@ -0,0 +1,205 @@
{% extends "base.html" %}
{% block title %}{{ t('Services') }} - {{ t('Your Business Name') }}{% endblock %}
{% block content %}
<!-- Page Header -->
<section class="bg-primary text-white py-5">
<div class="container">
<div class="row text-center">
<div class="col-lg-8 mx-auto">
<h1 class="display-4 fw-bold mb-3">{{ t('Our Services') }}</h1>
<p class="lead">{{ t('Discover our comprehensive range of professional services designed to help your business grow and succeed.') }}</p>
</div>
</div>
</div>
</section>
<!-- Services Overview -->
<section class="py-5">
<div class="container">
<div class="row text-center mb-5">
<div class="col-lg-8 mx-auto">
<h2 class="display-6 fw-bold mb-3">{{ t('What We Offer') }}</h2>
<p class="lead text-muted">{{ t('We provide a wide range of services tailored to meet the diverse needs of modern businesses.') }}</p>
</div>
</div>
<div class="row g-4">
<div class="col-lg-6">
<div class="card h-100 border-0 shadow-sm">
<div class="card-body p-4">
<div class="d-flex align-items-center mb-3">
<div class="service-icon me-3">
<i class="bi bi-gear text-primary display-5"></i>
</div>
<div>
<h4 class="fw-bold mb-1">{{ t('Service 1') }}</h4>
<p class="text-muted mb-0">{{ t('Professional service category') }}</p>
</div>
</div>
<p class="text-muted">{{ t('Comprehensive service description that explains the benefits, features, and value proposition of this offering. We ensure high quality and reliable delivery.') }}</p>
<ul class="list-unstyled">
<li class="mb-2"><i class="bi bi-check-circle text-success me-2"></i>{{ t('Feature 1 description') }}</li>
<li class="mb-2"><i class="bi bi-check-circle text-success me-2"></i>{{ t('Feature 2 description') }}</li>
<li class="mb-2"><i class="bi bi-check-circle text-success me-2"></i>{{ t('Feature 3 description') }}</li>
</ul>
<div class="mt-3">
<span class="badge bg-primary fs-6">{{ t('Starting from $99') }}</span>
</div>
</div>
</div>
</div>
<div class="col-lg-6">
<div class="card h-100 border-0 shadow-sm">
<div class="card-body p-4">
<div class="d-flex align-items-center mb-3">
<div class="service-icon me-3">
<i class="bi bi-graph-up text-primary display-5"></i>
</div>
<div>
<h4 class="fw-bold mb-1">{{ t('Service 2') }}</h4>
<p class="text-muted mb-0">{{ t('Advanced service category') }}</p>
</div>
</div>
<p class="text-muted">{{ t('Advanced service offering that provides comprehensive solutions for complex business challenges. Includes detailed analysis and customized implementation.') }}</p>
<ul class="list-unstyled">
<li class="mb-2"><i class="bi bi-check-circle text-success me-2"></i>{{ t('Advanced feature 1') }}</li>
<li class="mb-2"><i class="bi bi-check-circle text-success me-2"></i>{{ t('Advanced feature 2') }}</li>
<li class="mb-2"><i class="bi bi-check-circle text-success me-2"></i>{{ t('Advanced feature 3') }}</li>
</ul>
<div class="mt-3">
<span class="badge bg-primary fs-6">{{ t('Starting from $199') }}</span>
</div>
</div>
</div>
</div>
<div class="col-lg-6">
<div class="card h-100 border-0 shadow-sm">
<div class="card-body p-4">
<div class="d-flex align-items-center mb-3">
<div class="service-icon me-3">
<i class="bi bi-shield-check text-primary display-5"></i>
</div>
<div>
<h4 class="fw-bold mb-1">{{ t('Service 3') }}</h4>
<p class="text-muted mb-0">{{ t('Premium service category') }}</p>
</div>
</div>
<p class="text-muted">{{ t('Premium service that offers the highest level of support and features. Includes dedicated resources and priority support for critical business needs.') }}</p>
<ul class="list-unstyled">
<li class="mb-2"><i class="bi bi-check-circle text-success me-2"></i>{{ t('Premium feature 1') }}</li>
<li class="mb-2"><i class="bi bi-check-circle text-success me-2"></i>{{ t('Premium feature 2') }}</li>
<li class="mb-2"><i class="bi bi-check-circle text-success me-2"></i>{{ t('Premium feature 3') }}</li>
</ul>
<div class="mt-3">
<span class="badge bg-primary fs-6">{{ t('Starting from $299') }}</span>
</div>
</div>
</div>
</div>
<div class="col-lg-6">
<div class="card h-100 border-0 shadow-sm">
<div class="card-body p-4">
<div class="d-flex align-items-center mb-3">
<div class="service-icon me-3">
<i class="bi bi-tools text-primary display-5"></i>
</div>
<div>
<h4 class="fw-bold mb-1">{{ t('Service 4') }}</h4>
<p class="text-muted mb-0">{{ t('Specialized service category') }}</p>
</div>
</div>
<p class="text-muted">{{ t('Specialized service designed for specific industry needs. Provides targeted solutions with deep expertise in particular business domains.') }}</p>
<ul class="list-unstyled">
<li class="mb-2"><i class="bi bi-check-circle text-success me-2"></i>{{ t('Specialized feature 1') }}</li>
<li class="mb-2"><i class="bi bi-check-circle text-success me-2"></i>{{ t('Specialized feature 2') }}</li>
<li class="mb-2"><i class="bi bi-check-circle text-success me-2"></i>{{ t('Specialized feature 3') }}</li>
</ul>
<div class="mt-3">
<span class="badge bg-primary fs-6">{{ t('Starting from $149') }}</span>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- Process Section -->
<section class="bg-light py-5">
<div class="container">
<div class="row text-center mb-5">
<div class="col-lg-8 mx-auto">
<h2 class="display-6 fw-bold mb-3">{{ t('Our Process') }}</h2>
<p class="lead text-muted">{{ t('We follow a proven methodology to ensure successful project delivery and client satisfaction.') }}</p>
</div>
</div>
<div class="row g-4">
<div class="col-md-6 col-lg-3">
<div class="text-center">
<div class="process-step mb-3">
<div class="bg-primary text-white rounded-circle d-inline-flex align-items-center justify-content-center" style="width: 80px; height: 80px;">
<span class="fw-bold fs-4">1</span>
</div>
</div>
<h5 class="fw-bold">{{ t('Consultation') }}</h5>
<p class="text-muted">{{ t('We begin with a thorough consultation to understand your specific needs and requirements.') }}</p>
</div>
</div>
<div class="col-md-6 col-lg-3">
<div class="text-center">
<div class="process-step mb-3">
<div class="bg-primary text-white rounded-circle d-inline-flex align-items-center justify-content-center" style="width: 80px; height: 80px;">
<span class="fw-bold fs-4">2</span>
</div>
</div>
<h5 class="fw-bold">{{ t('Planning') }}</h5>
<p class="text-muted">{{ t('We develop a comprehensive plan tailored to your business objectives and timeline.') }}</p>
</div>
</div>
<div class="col-md-6 col-lg-3">
<div class="text-center">
<div class="process-step mb-3">
<div class="bg-primary text-white rounded-circle d-inline-flex align-items-center justify-content-center" style="width: 80px; height: 80px;">
<span class="fw-bold fs-4">3</span>
</div>
</div>
<h5 class="fw-bold">{{ t('Implementation') }}</h5>
<p class="text-muted">{{ t('Our expert team executes the plan with precision and attention to detail.') }}</p>
</div>
</div>
<div class="col-md-6 col-lg-3">
<div class="text-center">
<div class="process-step mb-3">
<div class="bg-primary text-white rounded-circle d-inline-flex align-items-center justify-content-center" style="width: 80px; height: 80px;">
<span class="fw-bold fs-4">4</span>
</div>
</div>
<h5 class="fw-bold">{{ t('Support') }}</h5>
<p class="text-muted">{{ t('We provide ongoing support and maintenance to ensure continued success.') }}</p>
</div>
</div>
</div>
</div>
</section>
<!-- CTA Section -->
<section class="py-5">
<div class="container text-center">
<h2 class="display-6 fw-bold mb-4">{{ t('Ready to Get Started?') }}</h2>
<p class="lead text-muted mb-4">{{ t('Contact us today to discuss your specific needs and get a customized quote for our services.') }}</p>
<div class="d-flex flex-wrap justify-content-center gap-3">
<a href="{{ url_for('contact') }}" class="btn btn-primary btn-lg">{{ t('Get a Quote') }}</a>
<a href="{{ url_for('about') }}" class="btn btn-outline-primary btn-lg">{{ t('Learn More About Us') }}</a>
</div>
</div>
</section>
{% endblock %}

11
templates/sitemap.xml Normal file
View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
{% for page in pages %}
<url>
<loc>{{ page.url }}</loc>
<lastmod>{{ current_year }}-01-01</lastmod>
<changefreq>weekly</changefreq>
<priority>{{ page.priority }}</priority>
</url>
{% endfor %}
</urlset>

37
test_app.py Normal file
View File

@ -0,0 +1,37 @@
#!/usr/bin/env python3
"""
Simple test script to debug Flask app issues
"""
import os
import sys
# Add current directory to Python path
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
try:
print("Testing imports...")
from flask import Flask
print("✓ Flask imported successfully")
from translation_manager import load_translations, translate, get_current_language
print("✓ Translation manager imported successfully")
print("\nTesting translation loading...")
load_translations()
print("✓ Translations loaded successfully")
print("\nTesting translation function...")
result = translate("Home")
print(f"✓ Translation test: 'Home' -> '{result}'")
print("\nTesting current language...")
lang = get_current_language()
print(f"✓ Current language: {lang}")
print("\nAll tests passed! The issue might be elsewhere.")
except Exception as e:
print(f"❌ Error: {e}")
import traceback
traceback.print_exc()

184
translation_manager.py Normal file
View File

@ -0,0 +1,184 @@
#!/usr/bin/env python3
"""
Simple JSON-based Translation Manager for Kobelly's Base website
No compilation needed - just edit JSON files directly!
"""
import os
import json
import glob
from flask import request, session, url_for
from functools import wraps
# Supported languages
SUPPORTED_LANGUAGES = ['en', 'de', 'fr', 'nl']
# Default language
DEFAULT_LANGUAGE = 'en'
# Translation cache
_translations = {}
def load_translations():
"""Load all translation files into memory."""
global _translations
if not os.path.exists('translations'):
os.makedirs('translations')
for lang in SUPPORTED_LANGUAGES:
lang_file = f'translations/{lang}.json'
if os.path.exists(lang_file):
try:
with open(lang_file, 'r', encoding='utf-8') as f:
_translations[lang] = json.load(f)
print(f"✓ Loaded {lang} translations ({len(_translations[lang])} keys)")
except Exception as e:
print(f"✗ Error loading {lang} translations: {e}")
_translations[lang] = {}
else:
print(f"{lang} translation file not found, creating empty one")
_translations[lang] = {}
save_translations(lang, {})
def save_translations(lang, translations):
"""Save translations for a specific language."""
if not os.path.exists('translations'):
os.makedirs('translations')
lang_file = f'translations/{lang}.json'
try:
with open(lang_file, 'w', encoding='utf-8') as f:
json.dump(translations, f, indent=2, ensure_ascii=False)
_translations[lang] = translations
print(f"✓ Saved {lang} translations")
return True
except Exception as e:
print(f"✗ Error saving {lang} translations: {e}")
return False
def get_current_language():
"""Get the current language from session or request."""
try:
# Check session first
if 'language' in session:
return session['language']
# Check request parameter
if request.args.get('lang') in SUPPORTED_LANGUAGES:
return request.args.get('lang')
# Check Accept-Language header
if request.accept_languages:
for lang in request.accept_languages:
if lang[0] in SUPPORTED_LANGUAGES:
return lang[0]
except RuntimeError:
# Working outside of request context
pass
return DEFAULT_LANGUAGE
def set_language(lang):
"""Set the current language in session."""
if lang in SUPPORTED_LANGUAGES:
session['language'] = lang
print(f"✓ Language set to {lang}")
return True
print(f"✗ Invalid language: {lang}")
return False
def translate(key, lang=None, **kwargs):
"""Translate a key to the specified language."""
if lang is None:
lang = get_current_language()
# Get translation
translation = _translations.get(lang, {}).get(key, key)
# Format with kwargs if provided
if kwargs:
try:
translation = translation.format(**kwargs)
except (KeyError, ValueError):
# If formatting fails, return the key
translation = key
return translation
def extract_strings():
"""Extract all translatable strings from templates and create translation files."""
print("📤 Extracting translatable strings...")
# Find all template files
template_files = glob.glob('templates/**/*.html', recursive=True)
# Extract strings (this is a simplified version)
# In practice, you'd want to parse the templates more thoroughly
extracted_strings = set()
for template_file in template_files:
try:
with open(template_file, 'r', encoding='utf-8') as f:
content = f.read()
# Look for common patterns (this is simplified)
# You might want to use a proper template parser
lines = content.split('\n')
for line in lines:
line = line.strip()
if line and not line.startswith('{') and not line.startswith('<!--'):
# Simple extraction - you might want to improve this
if len(line) > 3 and not line.startswith('<'):
extracted_strings.add(line)
except Exception as e:
print(f"Error reading {template_file}: {e}")
# Create translation structure
translations = {}
for string in sorted(extracted_strings):
translations[string] = string
# Save for each language
for lang in SUPPORTED_LANGUAGES:
save_translations(lang, translations)
print(f"✓ Extracted {len(extracted_strings)} strings")
return translations
def create_language_selector():
"""Create HTML for language selector."""
current_lang = get_current_language()
html = '<div class="language-selector">'
for lang in SUPPORTED_LANGUAGES:
lang_name = {
'en': 'English',
'de': 'Deutsch',
'fr': 'Français',
'nl': 'Nederlands'
}.get(lang, lang.upper())
active_class = 'active' if lang == current_lang else ''
html += f'<a href="?lang={lang}" class="lang-link {active_class}">{lang_name}</a>'
html += '</div>'
return html
# Flask integration
def init_app(app):
"""Initialize the translation system with Flask app."""
load_translations()
@app.context_processor
def inject_translations():
return {
'translate': translate,
'get_current_language': get_current_language,
'create_language_selector': create_language_selector
}
# Convenience function for templates
def t(key, **kwargs):
"""Short alias for translate function."""
return translate(key, **kwargs)

171
translations/de.json Normal file
View File

@ -0,0 +1,171 @@
{
"Your Business Name": "Ihr Firmenname",
"Professional Services": "Professionelle Dienstleistungen",
"Professional business website with modern design and excellent service": "Professionelle Geschäftswebsite mit modernem Design und ausgezeichnetem Service",
"business, services, professional, quality": "Geschäft, Dienstleistungen, professionell, Qualität",
"Home": "Startseite",
"Services": "Dienstleistungen",
"About": "Über uns",
"Contact": "Kontakt",
"Professional Solutions for Your Business": "Professionelle Lösungen für Ihr Unternehmen",
"We provide high-quality services tailored to meet your business needs. Our experienced team is dedicated to delivering exceptional results.": "Wir bieten hochwertige Dienstleistungen, die auf Ihre Geschäftsanforderungen zugeschnitten sind. Unser erfahrenes Team ist darauf ausgerichtet, außergewöhnliche Ergebnisse zu liefern.",
"Our Services": "Unsere Dienstleistungen",
"Get Started": "Jetzt starten",
"Why Choose Us": "Warum uns wählen",
"We offer comprehensive solutions with a focus on quality, reliability, and customer satisfaction.": "Wir bieten umfassende Lösungen mit Fokus auf Qualität, Zuverlässigkeit und Kundenzufriedenheit.",
"Quality Service": "Qualitätsservice",
"We maintain the highest standards in all our services to ensure your complete satisfaction.": "Wir halten die höchsten Standards in allen unseren Dienstleistungen ein, um Ihre vollständige Zufriedenheit zu gewährleisten.",
"Timely Delivery": "Pünktliche Lieferung",
"We understand the importance of deadlines and always deliver our services on time.": "Wir verstehen die Wichtigkeit von Terminen und liefern unsere Dienstleistungen immer pünktlich.",
"Expert Team": "Expertenteam",
"Our experienced professionals are dedicated to providing the best solutions for your business.": "Unsere erfahrenen Fachkräfte sind darauf ausgerichtet, die besten Lösungen für Ihr Unternehmen zu bieten.",
"Customer Focus": "Kundenorientierung",
"Your success is our priority. We work closely with you to understand your specific needs.": "Ihr Erfolg ist unsere Priorität. Wir arbeiten eng mit Ihnen zusammen, um Ihre spezifischen Bedürfnisse zu verstehen.",
"Discover our comprehensive range of professional services designed to help your business grow.": "Entdecken Sie unser umfassendes Angebot an professionellen Dienstleistungen, die darauf ausgerichtet sind, Ihr Unternehmen zum Wachstum zu verhelfen.",
"Service 1": "Dienstleistung 1",
"Professional service description that highlights the key benefits and features of this offering.": "Professionelle Dienstleistungsbeschreibung, die die wichtigsten Vorteile und Funktionen dieses Angebots hervorhebt.",
"Learn More": "Mehr erfahren",
"Service 2": "Dienstleistung 2",
"Comprehensive solution that addresses specific business challenges and delivers measurable results.": "Umfassende Lösung, die spezifische Geschäftsprobleme angeht und messbare Ergebnisse liefert.",
"Service 3": "Dienstleistung 3",
"Reliable and secure service that provides peace of mind and protects your business interests.": "Zuverlässiger und sicherer Service, der für Ruhe sorgt und Ihre Geschäftsinteressen schützt.",
"View All Services": "Alle Dienstleistungen anzeigen",
"About Our Company": "Über unser Unternehmen",
"We are a dedicated team of professionals committed to delivering exceptional services and building long-term relationships with our clients.": "Wir sind ein engagiertes Team von Fachkräften, die sich der Lieferung außergewöhnlicher Dienstleistungen und dem Aufbau langfristiger Beziehungen mit unseren Kunden verschrieben haben.",
"With years of experience in the industry, we understand the unique challenges that businesses face and provide tailored solutions to help them succeed.": "Mit jahrelanger Branchenerfahrung verstehen wir die einzigartigen Herausforderungen, denen Unternehmen gegenüberstehen, und bieten maßgeschneiderte Lösungen, um ihnen zum Erfolg zu verhelfen.",
"Learn More About Us": "Mehr über uns erfahren",
"Ready to Get Started?": "Bereit zum Starten?",
"Contact us today to discuss your needs and discover how we can help your business grow.": "Kontaktieren Sie uns heute, um Ihre Bedürfnisse zu besprechen und zu entdecken, wie wir Ihrem Unternehmen beim Wachstum helfen können.",
"Contact Us Now": "Jetzt kontaktieren",
"Discover our comprehensive range of professional services designed to help your business grow and succeed.": "Entdecken Sie unser umfassendes Angebot an professionellen Dienstleistungen, die darauf ausgerichtet sind, Ihr Unternehmen zum Wachstum und Erfolg zu verhelfen.",
"What We Offer": "Was wir anbieten",
"We provide a wide range of services tailored to meet the diverse needs of modern businesses.": "Wir bieten eine breite Palette von Dienstleistungen, die auf die vielfältigen Bedürfnisse moderner Unternehmen zugeschnitten sind.",
"Professional service category": "Professionelle Dienstleistungskategorie",
"Comprehensive service description that explains the benefits, features, and value proposition of this offering. We ensure high quality and reliable delivery.": "Umfassende Dienstleistungsbeschreibung, die die Vorteile, Funktionen und den Wertbeitrag dieses Angebots erklärt. Wir gewährleisten hohe Qualität und zuverlässige Lieferung.",
"Feature 1 description": "Funktion 1 Beschreibung",
"Feature 2 description": "Funktion 2 Beschreibung",
"Feature 3 description": "Funktion 3 Beschreibung",
"Starting from $99": "Ab 99€",
"Advanced service category": "Erweiterte Dienstleistungskategorie",
"Advanced service offering that provides comprehensive solutions for complex business challenges. Includes detailed analysis and customized implementation.": "Erweitertes Dienstleistungsangebot, das umfassende Lösungen für komplexe Geschäftsprobleme bietet. Enthält detaillierte Analyse und maßgeschneiderte Implementierung.",
"Advanced feature 1": "Erweiterte Funktion 1",
"Advanced feature 2": "Erweiterte Funktion 2",
"Advanced feature 3": "Erweiterte Funktion 3",
"Starting from $199": "Ab 199€",
"Premium service category": "Premium-Dienstleistungskategorie",
"Premium service that offers the highest level of support and features. Includes dedicated resources and priority support for critical business needs.": "Premium-Service, der das höchste Maß an Support und Funktionen bietet. Enthält dedizierte Ressourcen und Prioritäts-Support für kritische Geschäftsanforderungen.",
"Premium feature 1": "Premium-Funktion 1",
"Premium feature 2": "Premium-Funktion 2",
"Premium feature 3": "Premium-Funktion 3",
"Starting from $299": "Ab 299€",
"Specialized service category": "Spezialisierte Dienstleistungskategorie",
"Specialized service designed for specific industry needs. Provides targeted solutions with deep expertise in particular business domains.": "Spezialisierte Dienstleistung, die für spezifische Branchenanforderungen konzipiert ist. Bietet zielgerichtete Lösungen mit fundierter Expertise in bestimmten Geschäftsbereichen.",
"Specialized feature 1": "Spezialisierte Funktion 1",
"Specialized feature 2": "Spezialisierte Funktion 2",
"Specialized feature 3": "Spezialisierte Funktion 3",
"Starting from $149": "Ab 149€",
"Our Process": "Unser Prozess",
"We follow a proven methodology to ensure successful project delivery and client satisfaction.": "Wir folgen einer bewährten Methodik, um erfolgreiche Projektlieferung und Kundenzufriedenheit zu gewährleisten.",
"Consultation": "Beratung",
"We begin with a thorough consultation to understand your specific needs and requirements.": "Wir beginnen mit einer gründlichen Beratung, um Ihre spezifischen Bedürfnisse und Anforderungen zu verstehen.",
"Planning": "Planung",
"We develop a comprehensive plan tailored to your business objectives and timeline.": "Wir entwickeln einen umfassenden Plan, der auf Ihre Geschäftsziele und Zeitplan zugeschnitten ist.",
"Implementation": "Umsetzung",
"Our expert team executes the plan with precision and attention to detail.": "Unser Expertenteam führt den Plan mit Präzision und Liebe zum Detail aus.",
"Support": "Support",
"We provide ongoing support and maintenance to ensure continued success.": "Wir bieten kontinuierlichen Support und Wartung, um anhaltenden Erfolg zu gewährleisten.",
"Contact us today to discuss your specific needs and get a customized quote for our services.": "Kontaktieren Sie uns heute, um Ihre spezifischen Bedürfnisse zu besprechen und ein maßgeschneidertes Angebot für unsere Dienstleistungen zu erhalten.",
"Get a Quote": "Angebot anfordern",
"About Us": "Über uns",
"Learn more about our company, our mission, and the team behind our success.": "Erfahren Sie mehr über unser Unternehmen, unsere Mission und das Team hinter unserem Erfolg.",
"Our Story": "Unsere Geschichte",
"Founded with a vision to provide exceptional services and build lasting relationships with our clients.": "Gegründet mit der Vision, außergewöhnliche Dienstleistungen zu bieten und langfristige Beziehungen zu unseren Kunden aufzubauen.",
"We started as a small team with big dreams, determined to make a difference in the business world. Over the years, we have grown into a trusted partner for businesses of all sizes, helping them achieve their goals and overcome challenges.": "Wir begannen als kleines Team mit großen Träumen, entschlossen, einen Unterschied in der Geschäftswelt zu machen. Im Laufe der Jahre sind wir zu einem vertrauensvollen Partner für Unternehmen aller Größen geworden und helfen ihnen dabei, ihre Ziele zu erreichen und Herausforderungen zu meistern.",
"Our commitment to quality, innovation, and customer satisfaction has remained at the core of everything we do. We believe in building long-term partnerships based on trust, transparency, and mutual success.": "Unser Engagement für Qualität, Innovation und Kundenzufriedenheit ist das Herzstück alles dessen, was wir tun. Wir glauben an den Aufbau langfristiger Partnerschaften basierend auf Vertrauen, Transparenz und gegenseitigem Erfolg.",
"Years Experience": "Jahre Erfahrung",
"Happy Clients": "Zufriedene Kunden",
"Our Mission & Values": "Unsere Mission & Werte",
"We are guided by our core values and committed to our mission of delivering excellence.": "Wir werden von unseren Kernwerten geleitet und sind unserer Mission verpflichtet, Exzellenz zu liefern.",
"Our Mission": "Unsere Mission",
"To provide innovative, reliable, and cost-effective solutions that empower businesses to achieve their full potential and drive sustainable growth in an ever-evolving market.": "Innovative, zuverlässige und kosteneffektive Lösungen zu bieten, die Unternehmen befähigen, ihr volles Potenzial auszuschöpfen und nachhaltiges Wachstum in einem sich ständig entwickelnden Markt zu fördern.",
"Our Vision": "Unsere Vision",
"To be the leading provider of business solutions, recognized for our expertise, integrity, and commitment to client success across all industries.": "Der führende Anbieter von Geschäftslösungen zu sein, anerkannt für unsere Expertise, Integrität und unser Engagement für den Kundenerfolg in allen Branchen.",
"Excellence": "Exzellenz",
"We strive for excellence in everything we do, maintaining the highest standards of quality and professionalism.": "Wir streben nach Exzellenz in allem, was wir tun, und halten die höchsten Standards für Qualität und Professionalität ein.",
"Integrity": "Integrität",
"We conduct business with honesty, transparency, and ethical practices, building trust with our clients and partners.": "Wir führen Geschäfte mit Ehrlichkeit, Transparenz und ethischen Praktiken und bauen Vertrauen zu unseren Kunden und Partnern auf.",
"Innovation": "Innovation",
"We embrace new ideas and technologies to provide cutting-edge solutions that meet evolving business needs.": "Wir begrüßen neue Ideen und Technologien, um zukunftsweisende Lösungen zu bieten, die sich entwickelnde Geschäftsanforderungen erfüllen.",
"Our Team": "Unser Team",
"Meet the dedicated professionals who make our company successful.": "Lernen Sie die engagierten Fachkräfte kennen, die unser Unternehmen erfolgreich machen.",
"John Doe": "Max Mustermann",
"CEO & Founder": "CEO & Gründer",
"Experienced leader with a passion for innovation and business growth.": "Erfahrener Führungskraft mit Leidenschaft für Innovation und Geschäftswachstum.",
"Jane Smith": "Anna Schmidt",
"Operations Manager": "Betriebsleiterin",
"Dedicated professional ensuring smooth operations and client satisfaction.": "Engagierte Fachkraft, die für reibungslose Abläufe und Kundenzufriedenheit sorgt.",
"Mike Johnson": "Michael Weber",
"Technical Lead": "Technischer Leiter",
"Expert in technical solutions and innovative problem-solving approaches.": "Experte für technische Lösungen und innovative Problemlösungsansätze.",
"Sarah Wilson": "Sarah Müller",
"Client Relations": "Kundenbeziehungen",
"Committed to building strong relationships and ensuring client success.": "Verpflichtet, starke Beziehungen aufzubauen und den Kundenerfolg zu gewährleisten.",
"Ready to Work With Us?": "Bereit, mit uns zu arbeiten?",
"Let us help you achieve your business goals with our professional services and dedicated support.": "Lassen Sie uns Ihnen dabei helfen, Ihre Geschäftsziele mit unseren professionellen Dienstleistungen und engagiertem Support zu erreichen.",
"Get Started Today": "Heute starten",
"Contact Us": "Kontaktieren Sie uns",
"Get in touch with us today. We are here to help you with all your business needs.": "Kontaktieren Sie uns heute. Wir sind hier, um Ihnen bei allen Ihren Geschäftsanforderungen zu helfen.",
"Send Us a Message": "Senden Sie uns eine Nachricht",
"Full Name": "Vollständiger Name",
"Email Address": "E-Mail-Adresse",
"Subject": "Betreff",
"Message": "Nachricht",
"Send Message": "Nachricht senden",
"Get in Touch": "Kontakt aufnehmen",
"Address": "Adresse",
"123 Business Street": "Musterstraße 123",
"City, State 12345": "Stadt, Bundesland 12345",
"Country": "Land",
"Phone": "Telefon",
"Email": "E-Mail",
"Business Hours": "Geschäftszeiten",
"Monday - Friday": "Montag - Freitag",
"9:00 AM - 6:00 PM": "9:00 - 18:00 Uhr",
"Saturday": "Samstag",
"10:00 AM - 4:00 PM": "10:00 - 16:00 Uhr",
"Follow Us": "Folgen Sie uns",
"Frequently Asked Questions": "Häufig gestellte Fragen",
"Find answers to common questions about our services and processes.": "Finden Sie Antworten auf häufige Fragen zu unseren Dienstleistungen und Prozessen.",
"What services do you offer?": "Welche Dienstleistungen bieten Sie an?",
"We offer a comprehensive range of professional services including consulting, implementation, support, and specialized solutions tailored to meet your specific business needs.": "Wir bieten ein umfassendes Angebot an professionellen Dienstleistungen einschließlich Beratung, Implementierung, Support und spezialisierte Lösungen, die auf Ihre spezifischen Geschäftsanforderungen zugeschnitten sind.",
"How long does a typical project take?": "Wie lange dauert ein typisches Projekt?",
"Project timelines vary depending on the scope and complexity. We typically complete projects within 2-8 weeks, but we always provide detailed timelines during our initial consultation.": "Projektzeitpläne variieren je nach Umfang und Komplexität. Wir schließen Projekte typischerweise innerhalb von 2-8 Wochen ab, aber wir geben immer detaillierte Zeitpläne während unserer ersten Beratung.",
"Do you provide ongoing support?": "Bieten Sie kontinuierlichen Support?",
"Yes, we provide comprehensive ongoing support and maintenance services to ensure your continued success and satisfaction with our solutions.": "Ja, wir bieten umfassende kontinuierliche Support- und Wartungsdienstleistungen, um Ihren anhaltenden Erfolg und Ihre Zufriedenheit mit unseren Lösungen zu gewährleisten.",
"Why Choose Us?": "Warum uns wählen?",
"Experience": "Erfahrung",
"Years of industry experience and expertise": "Jahrelange Branchenerfahrung und Expertise",
"Quality": "Qualität",
"Commitment to delivering high-quality solutions": "Verpflichtung zur Lieferung hochwertiger Lösungen",
"Support": "Support",
"Dedicated customer support and maintenance": "Engagierter Kundensupport und Wartung",
"Flexibility": "Flexibilität",
"Customized solutions to meet your specific needs": "Maßgeschneiderte Lösungen für Ihre spezifischen Bedürfnisse",
"Reliability": "Zuverlässigkeit",
"Proven track record of successful project delivery": "Bewiesene Erfolgsbilanz bei der Projektlieferung",
"Professional services with quality and reliability. We are committed to delivering excellence in everything we do.": "Professionelle Dienstleistungen mit Qualität und Zuverlässigkeit. Wir sind verpflichtet, in allem, was wir tun, Exzellenz zu liefern.",
"Quick Links": "Schnelllinks",
"Contact Info": "Kontaktinformationen",
"All rights reserved.": "Alle Rechte vorbehalten.",
"Privacy Policy": "Datenschutzrichtlinie",
"Terms of Service": "Nutzungsbedingungen",
"Page Not Found": "Seite nicht gefunden",
"The page you are looking for might have been removed, had its name changed, or is temporarily unavailable.": "Die gesuchte Seite wurde möglicherweise entfernt, umbenannt oder ist vorübergehend nicht verfügbar.",
"Go to Homepage": "Zur Startseite",
"Server Error": "Serverfehler",
"Something went wrong on our end. We are working to fix the issue. Please try again later.": "Auf unserer Seite ist etwas schiefgegangen. Wir arbeiten daran, das Problem zu beheben. Bitte versuchen Sie es später erneut.",
"Contact Support": "Support kontaktieren",
"Please fill in all fields": "Bitte füllen Sie alle Felder aus",
"Thank you! Your message has been sent successfully.": "Vielen Dank! Ihre Nachricht wurde erfolgreich gesendet.",
"Sorry, there was an error sending your message. Please try again.": "Entschuldigung, beim Senden Ihrer Nachricht ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut."
}

185
translations/en.json Normal file
View File

@ -0,0 +1,185 @@
{
"Your Business Name": "Your Business Name",
"Professional Services": "Professional Services",
"Professional business website with modern design and excellent service": "Professional business website with modern design and excellent service",
"business, services, professional, quality": "business, services, professional, quality",
"Home": "Home",
"Services": "Services",
"About": "About",
"Contact": "Contact",
"Professional Solutions for Your Business": "Professional Solutions for Your Business",
"We provide high-quality services tailored to meet your business needs. Our experienced team is dedicated to delivering exceptional results.": "We provide high-quality services tailored to meet your business needs. Our experienced team is dedicated to delivering exceptional results.",
"Our Services": "Our Services",
"Get Started": "Get Started",
"Why Choose Us": "Why Choose Us",
"We offer comprehensive solutions with a focus on quality, reliability, and customer satisfaction.": "We offer comprehensive solutions with a focus on quality, reliability, and customer satisfaction.",
"Quality Service": "Quality Service",
"We maintain the highest standards in all our services to ensure your complete satisfaction.": "We maintain the highest standards in all our services to ensure your complete satisfaction.",
"Timely Delivery": "Timely Delivery",
"We understand the importance of deadlines and always deliver our services on time.": "We understand the importance of deadlines and always deliver our services on time.",
"Expert Team": "Expert Team",
"Our experienced professionals are dedicated to providing the best solutions for your business.": "Our experienced professionals are dedicated to providing the best solutions for your business.",
"Customer Focus": "Customer Focus",
"Your success is our priority. We work closely with you to understand your specific needs.": "Your success is our priority. We work closely with you to understand your specific needs.",
"Discover our comprehensive range of professional services designed to help your business grow.": "Discover our comprehensive range of professional services designed to help your business grow.",
"Service 1": "Service 1",
"Professional service description that highlights the key benefits and features of this offering.": "Professional service description that highlights the key benefits and features of this offering.",
"Learn More": "Learn More",
"Service 2": "Service 2",
"Comprehensive solution that addresses specific business challenges and delivers measurable results.": "Comprehensive solution that addresses specific business challenges and delivers measurable results.",
"Service 3": "Service 3",
"Reliable and secure service that provides peace of mind and protects your business interests.": "Reliable and secure service that provides peace of mind and protects your business interests.",
"View All Services": "View All Services",
"About Our Company": "About Our Company",
"We are a dedicated team of professionals committed to delivering exceptional services and building long-term relationships with our clients.": "We are a dedicated team of professionals committed to delivering exceptional services and building long-term relationships with our clients.",
"With years of experience in the industry, we understand the unique challenges that businesses face and provide tailored solutions to help them succeed.": "With years of experience in the industry, we understand the unique challenges that businesses face and provide tailored solutions to help them succeed.",
"Learn More About Us": "Learn More About Us",
"Ready to Get Started?": "Ready to Get Started?",
"Contact us today to discuss your needs and discover how we can help your business grow.": "Contact us today to discuss your needs and discover how we can help your business grow.",
"Contact Us Now": "Contact Us Now",
"Discover our comprehensive range of professional services designed to help your business grow and succeed.": "Discover our comprehensive range of professional services designed to help your business grow and succeed.",
"What We Offer": "What We Offer",
"We provide a wide range of services tailored to meet the diverse needs of modern businesses.": "We provide a wide range of services tailored to meet the diverse needs of modern businesses.",
"Professional service category": "Professional service category",
"Comprehensive service description that explains the benefits, features, and value proposition of this offering. We ensure high quality and reliable delivery.": "Comprehensive service description that explains the benefits, features, and value proposition of this offering. We ensure high quality and reliable delivery.",
"Feature 1 description": "Feature 1 description",
"Feature 2 description": "Feature 2 description",
"Feature 3 description": "Feature 3 description",
"Starting from $99": "Starting from $99",
"Advanced service category": "Advanced service category",
"Advanced service offering that provides comprehensive solutions for complex business challenges. Includes detailed analysis and customized implementation.": "Advanced service offering that provides comprehensive solutions for complex business challenges. Includes detailed analysis and customized implementation.",
"Advanced feature 1": "Advanced feature 1",
"Advanced feature 2": "Advanced feature 2",
"Advanced feature 3": "Advanced feature 3",
"Starting from $199": "Starting from $199",
"Premium service category": "Premium service category",
"Premium service that offers the highest level of support and features. Includes dedicated resources and priority support for critical business needs.": "Premium service that offers the highest level of support and features. Includes dedicated resources and priority support for critical business needs.",
"Premium feature 1": "Premium feature 1",
"Premium feature 2": "Premium feature 2",
"Premium feature 3": "Premium feature 3",
"Starting from $299": "Starting from $299",
"Specialized service category": "Specialized service category",
"Specialized service designed for specific industry needs. Provides targeted solutions with deep expertise in particular business domains.": "Specialized service designed for specific industry needs. Provides targeted solutions with deep expertise in particular business domains.",
"Specialized feature 1": "Specialized feature 1",
"Specialized feature 2": "Specialized feature 2",
"Specialized feature 3": "Specialized feature 3",
"Starting from $149": "Starting from $149",
"Our Process": "Our Process",
"We follow a proven methodology to ensure successful project delivery and client satisfaction.": "We follow a proven methodology to ensure successful project delivery and client satisfaction.",
"Consultation": "Consultation",
"We begin with a thorough consultation to understand your specific needs and requirements.": "We begin with a thorough consultation to understand your specific needs and requirements.",
"Planning": "Planning",
"We develop a comprehensive plan tailored to your business objectives and timeline.": "We develop a comprehensive plan tailored to your business objectives and timeline.",
"Implementation": "Implementation",
"Our expert team executes the plan with precision and attention to detail.": "Our expert team executes the plan with precision and attention to detail.",
"Support": "Support",
"We provide ongoing support and maintenance to ensure continued success.": "We provide ongoing support and maintenance to ensure continued success.",
"Contact us today to discuss your specific needs and get a customized quote for our services.": "Contact us today to discuss your specific needs and get a customized quote for our services.",
"Get a Quote": "Get a Quote",
"About Us": "About Us",
"Learn more about our company, our mission, and the team behind our success.": "Learn more about our company, our mission, and the team behind our success.",
"Our Story": "Our Story",
"Founded with a vision to provide exceptional services and build lasting relationships with our clients.": "Founded with a vision to provide exceptional services and build lasting relationships with our clients.",
"We started as a small team with big dreams, determined to make a difference in the business world. Over the years, we have grown into a trusted partner for businesses of all sizes, helping them achieve their goals and overcome challenges.": "We started as a small team with big dreams, determined to make a difference in the business world. Over the years, we have grown into a trusted partner for businesses of all sizes, helping them achieve their goals and overcome challenges.",
"Our commitment to quality, innovation, and customer satisfaction has remained at the core of everything we do. We believe in building long-term partnerships based on trust, transparency, and mutual success.": "Our commitment to quality, innovation, and customer satisfaction has remained at the core of everything we do. We believe in building long-term partnerships based on trust, transparency, and mutual success.",
"Years Experience": "Years Experience",
"Happy Clients": "Happy Clients",
"Our Mission & Values": "Our Mission & Values",
"We are guided by our core values and committed to our mission of delivering excellence.": "We are guided by our core values and committed to our mission of delivering excellence.",
"Our Mission": "Our Mission",
"To provide innovative, reliable, and cost-effective solutions that empower businesses to achieve their full potential and drive sustainable growth in an ever-evolving market.": "To provide innovative, reliable, and cost-effective solutions that empower businesses to achieve their full potential and drive sustainable growth in an ever-evolving market.",
"Our Vision": "Our Vision",
"To be the leading provider of business solutions, recognized for our expertise, integrity, and commitment to client success across all industries.": "To be the leading provider of business solutions, recognized for our expertise, integrity, and commitment to client success across all industries.",
"Excellence": "Excellence",
"We strive for excellence in everything we do, maintaining the highest standards of quality and professionalism.": "We strive for excellence in everything we do, maintaining the highest standards of quality and professionalism.",
"Integrity": "Integrity",
"We conduct business with honesty, transparency, and ethical practices, building trust with our clients and partners.": "We conduct business with honesty, transparency, and ethical practices, building trust with our clients and partners.",
"Innovation": "Innovation",
"We embrace new ideas and technologies to provide cutting-edge solutions that meet evolving business needs.": "We embrace new ideas and technologies to provide cutting-edge solutions that meet evolving business needs.",
"Our Team": "Our Team",
"Meet the dedicated professionals who make our company successful.": "Meet the dedicated professionals who make our company successful.",
"John Doe": "John Doe",
"CEO & Founder": "CEO & Founder",
"Experienced leader with a passion for innovation and business growth.": "Experienced leader with a passion for innovation and business growth.",
"Jane Smith": "Jane Smith",
"Operations Manager": "Operations Manager",
"Dedicated professional ensuring smooth operations and client satisfaction.": "Dedicated professional ensuring smooth operations and client satisfaction.",
"Mike Johnson": "Mike Johnson",
"Technical Lead": "Technical Lead",
"Expert in technical solutions and innovative problem-solving approaches.": "Expert in technical solutions and innovative problem-solving approaches.",
"Sarah Wilson": "Sarah Wilson",
"Client Relations": "Client Relations",
"Committed to building strong relationships and ensuring client success.": "Committed to building strong relationships and ensuring client success.",
"Ready to Work With Us?": "Ready to Work With Us?",
"Let us help you achieve your business goals with our professional services and dedicated support.": "Let us help you achieve your business goals with our professional services and dedicated support.",
"Get Started Today": "Get Started Today",
"Contact Us": "Contact Us",
"Get in touch with us today. We are here to help you with all your business needs.": "Get in touch with us today. We are here to help you with all your business needs.",
"Send Us a Message": "Send Us a Message",
"Full Name": "Full Name",
"Email Address": "Email Address",
"Subject": "Subject",
"Message": "Message",
"Send Message": "Send Message",
"Get in Touch": "Get in Touch",
"Address": "Address",
"123 Business Street": "123 Business Street",
"City, State 12345": "City, State 12345",
"Country": "Country",
"Phone": "Phone",
"Email": "Email",
"Business Hours": "Business Hours",
"Monday - Friday": "Monday - Friday",
"9:00 AM - 6:00 PM": "9:00 AM - 6:00 PM",
"Saturday": "Saturday",
"10:00 AM - 4:00 PM": "10:00 AM - 4:00 PM",
"Follow Us": "Follow Us",
"Frequently Asked Questions": "Frequently Asked Questions",
"Find answers to common questions about our services and processes.": "Find answers to common questions about our services and processes.",
"What services do you offer?": "What services do you offer?",
"We offer a comprehensive range of professional services including consulting, implementation, support, and specialized solutions tailored to meet your specific business needs.": "We offer a comprehensive range of professional services including consulting, implementation, support, and specialized solutions tailored to meet your specific business needs.",
"How long does a typical project take?": "How long does a typical project take?",
"Project timelines vary depending on the scope and complexity. We typically complete projects within 2-8 weeks, but we always provide detailed timelines during our initial consultation.": "Project timelines vary depending on the scope and complexity. We typically complete projects within 2-8 weeks, but we always provide detailed timelines during our initial consultation.",
"Do you provide ongoing support?": "Do you provide ongoing support?",
"Yes, we provide comprehensive ongoing support and maintenance services to ensure your continued success and satisfaction with our solutions.": "Yes, we provide comprehensive ongoing support and maintenance services to ensure your continued success and satisfaction with our solutions.",
"Why Choose Us?": "Why Choose Us?",
"Experience": "Experience",
"Years of industry experience and expertise": "Years of industry experience and expertise",
"Quality": "Quality",
"Commitment to delivering high-quality solutions": "Commitment to delivering high-quality solutions",
"Support": "Support",
"Dedicated customer support and maintenance": "Dedicated customer support and maintenance",
"Flexibility": "Flexibility",
"Customized solutions to meet your specific needs": "Customized solutions to meet your specific needs",
"Reliability": "Reliability",
"Proven track record of successful project delivery": "Proven track record of successful project delivery",
"Professional services with quality and reliability. We are committed to delivering excellence in everything we do.": "Professional services with quality and reliability. We are committed to delivering excellence in everything we do.",
"Quick Links": "Quick Links",
"Contact Info": "Contact Info",
"All rights reserved.": "All rights reserved.",
"Privacy Policy": "Privacy Policy",
"Terms of Service": "Terms of Service",
"Page Not Found": "Page Not Found",
"The page you are looking for might have been removed, had its name changed, or is temporarily unavailable.": "The page you are looking for might have been removed, had its name changed, or is temporarily unavailable.",
"Go to Homepage": "Go to Homepage",
"Server Error": "Server Error",
"Something went wrong on our end. We are working to fix the issue. Please try again later.": "Something went wrong on our end. We are working to fix the issue. Please try again later.",
"Contact Support": "Contact Support",
"Please fill in all fields": "Please fill in all fields",
"Thank you! Your message has been sent successfully.": "Thank you! Your message has been sent successfully.",
"Sorry, there was an error sending your message. Please try again.": "Sorry, there was an error sending your message. Please try again.",
"Bad Request": "Bad Request",
"The server could not understand your request. Please check your input and try again.": "The server could not understand your request. Please check your input and try again.",
"Unauthorized": "Unauthorized",
"You are not authorized to view this page. Please log in or contact support if you believe this is an error.": "You are not authorized to view this page. Please log in or contact support if you believe this is an error.",
"Forbidden": "Forbidden",
"You do not have permission to access this page.": "You do not have permission to access this page.",
"Method Not Allowed": "Method Not Allowed",
"The method used for this request is not allowed.": "The method used for this request is not allowed.",
"Bad Gateway": "Bad Gateway",
"The server received an invalid response from the upstream server.": "The server received an invalid response from the upstream server.",
"Service Unavailable": "Service Unavailable",
"The server is currently unavailable. Please try again later.": "The server is currently unavailable. Please try again later.",
"Gateway Timeout": "Gateway Timeout",
"The server did not receive a timely response from the upstream server.": "The server did not receive a timely response from the upstream server."
}

171
translations/fr.json Normal file
View File

@ -0,0 +1,171 @@
{
"Your Business Name": "Nom de votre entreprise",
"Professional Services": "Services professionnels",
"Professional business website with modern design and excellent service": "Site web professionnel avec design moderne et service excellent",
"business, services, professional, quality": "entreprise, services, professionnel, qualité",
"Home": "Accueil",
"Services": "Services",
"About": "À propos",
"Contact": "Contact",
"Professional Solutions for Your Business": "Solutions professionnelles pour votre entreprise",
"We provide high-quality services tailored to meet your business needs. Our experienced team is dedicated to delivering exceptional results.": "Nous fournissons des services de haute qualité adaptés à vos besoins commerciaux. Notre équipe expérimentée se consacre à fournir des résultats exceptionnels.",
"Our Services": "Nos services",
"Get Started": "Commencer",
"Why Choose Us": "Pourquoi nous choisir",
"We offer comprehensive solutions with a focus on quality, reliability, and customer satisfaction.": "Nous offrons des solutions complètes axées sur la qualité, la fiabilité et la satisfaction client.",
"Quality Service": "Service de qualité",
"We maintain the highest standards in all our services to ensure your complete satisfaction.": "Nous maintenons les plus hauts standards dans tous nos services pour assurer votre satisfaction complète.",
"Timely Delivery": "Livraison ponctuelle",
"We understand the importance of deadlines and always deliver our services on time.": "Nous comprenons l'importance des délais et livrons toujours nos services à temps.",
"Expert Team": "Équipe d'experts",
"Our experienced professionals are dedicated to providing the best solutions for your business.": "Nos professionnels expérimentés se consacrent à fournir les meilleures solutions pour votre entreprise.",
"Customer Focus": "Orientation client",
"Your success is our priority. We work closely with you to understand your specific needs.": "Votre succès est notre priorité. Nous travaillons en étroite collaboration avec vous pour comprendre vos besoins spécifiques.",
"Discover our comprehensive range of professional services designed to help your business grow.": "Découvrez notre gamme complète de services professionnels conçus pour aider votre entreprise à croître.",
"Service 1": "Service 1",
"Professional service description that highlights the key benefits and features of this offering.": "Description de service professionnel qui met en évidence les principaux avantages et fonctionnalités de cette offre.",
"Learn More": "En savoir plus",
"Service 2": "Service 2",
"Comprehensive solution that addresses specific business challenges and delivers measurable results.": "Solution complète qui répond aux défis commerciaux spécifiques et fournit des résultats mesurables.",
"Service 3": "Service 3",
"Reliable and secure service that provides peace of mind and protects your business interests.": "Service fiable et sécurisé qui procure tranquillité d'esprit et protège vos intérêts commerciaux.",
"View All Services": "Voir tous les services",
"About Our Company": "À propos de notre entreprise",
"We are a dedicated team of professionals committed to delivering exceptional services and building long-term relationships with our clients.": "Nous sommes une équipe dédiée de professionnels engagés à fournir des services exceptionnels et à construire des relations à long terme avec nos clients.",
"With years of experience in the industry, we understand the unique challenges that businesses face and provide tailored solutions to help them succeed.": "Avec des années d'expérience dans l'industrie, nous comprenons les défis uniques auxquels les entreprises font face et fournissons des solutions adaptées pour les aider à réussir.",
"Learn More About Us": "En savoir plus sur nous",
"Ready to Get Started?": "Prêt à commencer ?",
"Contact us today to discuss your needs and discover how we can help your business grow.": "Contactez-nous aujourd'hui pour discuter de vos besoins et découvrir comment nous pouvons aider votre entreprise à croître.",
"Contact Us Now": "Contactez-nous maintenant",
"Discover our comprehensive range of professional services designed to help your business grow and succeed.": "Découvrez notre gamme complète de services professionnels conçus pour aider votre entreprise à croître et réussir.",
"What We Offer": "Ce que nous offrons",
"We provide a wide range of services tailored to meet the diverse needs of modern businesses.": "Nous fournissons une large gamme de services adaptés aux besoins diversifiés des entreprises modernes.",
"Professional service category": "Catégorie de service professionnel",
"Comprehensive service description that explains the benefits, features, and value proposition of this offering. We ensure high quality and reliable delivery.": "Description de service complète qui explique les avantages, fonctionnalités et proposition de valeur de cette offre. Nous assurons une livraison de haute qualité et fiable.",
"Feature 1 description": "Description de la fonctionnalité 1",
"Feature 2 description": "Description de la fonctionnalité 2",
"Feature 3 description": "Description de la fonctionnalité 3",
"Starting from $99": "À partir de 99€",
"Advanced service category": "Catégorie de service avancé",
"Advanced service offering that provides comprehensive solutions for complex business challenges. Includes detailed analysis and customized implementation.": "Offre de service avancé qui fournit des solutions complètes pour les défis commerciaux complexes. Inclut une analyse détaillée et une implémentation personnalisée.",
"Advanced feature 1": "Fonctionnalité avancée 1",
"Advanced feature 2": "Fonctionnalité avancée 2",
"Advanced feature 3": "Fonctionnalité avancée 3",
"Starting from $199": "À partir de 199€",
"Premium service category": "Catégorie de service premium",
"Premium service that offers the highest level of support and features. Includes dedicated resources and priority support for critical business needs.": "Service premium qui offre le plus haut niveau de support et de fonctionnalités. Inclut des ressources dédiées et un support prioritaire pour les besoins commerciaux critiques.",
"Premium feature 1": "Fonctionnalité premium 1",
"Premium feature 2": "Fonctionnalité premium 2",
"Premium feature 3": "Fonctionnalité premium 3",
"Starting from $299": "À partir de 299€",
"Specialized service category": "Catégorie de service spécialisé",
"Specialized service designed for specific industry needs. Provides targeted solutions with deep expertise in particular business domains.": "Service spécialisé conçu pour les besoins spécifiques de l'industrie. Fournit des solutions ciblées avec une expertise approfondie dans des domaines commerciaux particuliers.",
"Specialized feature 1": "Fonctionnalité spécialisée 1",
"Specialized feature 2": "Fonctionnalité spécialisée 2",
"Specialized feature 3": "Fonctionnalité spécialisée 3",
"Starting from $149": "À partir de 149€",
"Our Process": "Notre processus",
"We follow a proven methodology to ensure successful project delivery and client satisfaction.": "Nous suivons une méthodologie éprouvée pour assurer une livraison de projet réussie et la satisfaction client.",
"Consultation": "Consultation",
"We begin with a thorough consultation to understand your specific needs and requirements.": "Nous commençons par une consultation approfondie pour comprendre vos besoins et exigences spécifiques.",
"Planning": "Planification",
"We develop a comprehensive plan tailored to your business objectives and timeline.": "Nous développons un plan complet adapté à vos objectifs commerciaux et à votre calendrier.",
"Implementation": "Implémentation",
"Our expert team executes the plan with precision and attention to detail.": "Notre équipe d'experts exécute le plan avec précision et attention aux détails.",
"Support": "Support",
"We provide ongoing support and maintenance to ensure continued success.": "Nous fournissons un support et une maintenance continus pour assurer un succès continu.",
"Contact us today to discuss your specific needs and get a customized quote for our services.": "Contactez-nous aujourd'hui pour discuter de vos besoins spécifiques et obtenir un devis personnalisé pour nos services.",
"Get a Quote": "Obtenir un devis",
"About Us": "À propos de nous",
"Learn more about our company, our mission, and the team behind our success.": "En savoir plus sur notre entreprise, notre mission et l'équipe derrière notre succès.",
"Our Story": "Notre histoire",
"Founded with a vision to provide exceptional services and build lasting relationships with our clients.": "Fondée avec une vision de fournir des services exceptionnels et de construire des relations durables avec nos clients.",
"We started as a small team with big dreams, determined to make a difference in the business world. Over the years, we have grown into a trusted partner for businesses of all sizes, helping them achieve their goals and overcome challenges.": "Nous avons commencé comme une petite équipe avec de grands rêves, déterminés à faire une différence dans le monde des affaires. Au fil des années, nous sommes devenus un partenaire de confiance pour les entreprises de toutes tailles, les aidant à atteindre leurs objectifs et à surmonter les défis.",
"Our commitment to quality, innovation, and customer satisfaction has remained at the core of everything we do. We believe in building long-term partnerships based on trust, transparency, and mutual success.": "Notre engagement envers la qualité, l'innovation et la satisfaction client est resté au cœur de tout ce que nous faisons. Nous croyons en la construction de partenariats à long terme basés sur la confiance, la transparence et le succès mutuel.",
"Years Experience": "Années d'expérience",
"Happy Clients": "Clients satisfaits",
"Our Mission & Values": "Notre mission et nos valeurs",
"We are guided by our core values and committed to our mission of delivering excellence.": "Nous sommes guidés par nos valeurs fondamentales et engagés envers notre mission de fournir l'excellence.",
"Our Mission": "Notre mission",
"To provide innovative, reliable, and cost-effective solutions that empower businesses to achieve their full potential and drive sustainable growth in an ever-evolving market.": "Fournir des solutions innovantes, fiables et rentables qui permettent aux entreprises d'atteindre leur plein potentiel et de stimuler une croissance durable dans un marché en constante évolution.",
"Our Vision": "Notre vision",
"To be the leading provider of business solutions, recognized for our expertise, integrity, and commitment to client success across all industries.": "Être le fournisseur leader de solutions commerciales, reconnu pour notre expertise, notre intégrité et notre engagement envers le succès client dans tous les secteurs.",
"Excellence": "Excellence",
"We strive for excellence in everything we do, maintaining the highest standards of quality and professionalism.": "Nous visons l'excellence dans tout ce que nous faisons, maintenant les plus hauts standards de qualité et de professionnalisme.",
"Integrity": "Intégrité",
"We conduct business with honesty, transparency, and ethical practices, building trust with our clients and partners.": "Nous menons nos affaires avec honnêteté, transparence et pratiques éthiques, construisant la confiance avec nos clients et partenaires.",
"Innovation": "Innovation",
"We embrace new ideas and technologies to provide cutting-edge solutions that meet evolving business needs.": "Nous adoptons de nouvelles idées et technologies pour fournir des solutions de pointe qui répondent aux besoins commerciaux en évolution.",
"Our Team": "Notre équipe",
"Meet the dedicated professionals who make our company successful.": "Rencontrez les professionnels dédiés qui rendent notre entreprise réussie.",
"John Doe": "Jean Dupont",
"CEO & Founder": "PDG et fondateur",
"Experienced leader with a passion for innovation and business growth.": "Leader expérimenté avec une passion pour l'innovation et la croissance commerciale.",
"Jane Smith": "Marie Martin",
"Operations Manager": "Directrice des opérations",
"Dedicated professional ensuring smooth operations and client satisfaction.": "Professionnelle dédiée assurant des opérations fluides et la satisfaction client.",
"Mike Johnson": "Michel Dubois",
"Technical Lead": "Chef technique",
"Expert in technical solutions and innovative problem-solving approaches.": "Expert en solutions techniques et approches innovantes de résolution de problèmes.",
"Sarah Wilson": "Sophie Bernard",
"Client Relations": "Relations client",
"Committed to building strong relationships and ensuring client success.": "Engagée à construire des relations solides et assurer le succès client.",
"Ready to Work With Us?": "Prêt à travailler avec nous ?",
"Let us help you achieve your business goals with our professional services and dedicated support.": "Laissez-nous vous aider à atteindre vos objectifs commerciaux avec nos services professionnels et notre support dédié.",
"Get Started Today": "Commencer aujourd'hui",
"Contact Us": "Contactez-nous",
"Get in touch with us today. We are here to help you with all your business needs.": "Contactez-nous aujourd'hui. Nous sommes ici pour vous aider avec tous vos besoins commerciaux.",
"Send Us a Message": "Envoyez-nous un message",
"Full Name": "Nom complet",
"Email Address": "Adresse e-mail",
"Subject": "Sujet",
"Message": "Message",
"Send Message": "Envoyer le message",
"Get in Touch": "Nous contacter",
"Address": "Adresse",
"123 Business Street": "123 Rue du Commerce",
"City, State 12345": "Ville, État 12345",
"Country": "Pays",
"Phone": "Téléphone",
"Email": "E-mail",
"Business Hours": "Heures d'ouverture",
"Monday - Friday": "Lundi - Vendredi",
"9:00 AM - 6:00 PM": "9h00 - 18h00",
"Saturday": "Samedi",
"10:00 AM - 4:00 PM": "10h00 - 16h00",
"Follow Us": "Suivez-nous",
"Frequently Asked Questions": "Questions fréquemment posées",
"Find answers to common questions about our services and processes.": "Trouvez des réponses aux questions courantes sur nos services et processus.",
"What services do you offer?": "Quels services proposez-vous ?",
"We offer a comprehensive range of professional services including consulting, implementation, support, and specialized solutions tailored to meet your specific business needs.": "Nous offrons une gamme complète de services professionnels incluant la consultation, l'implémentation, le support et des solutions spécialisées adaptées à vos besoins commerciaux spécifiques.",
"How long does a typical project take?": "Combien de temps dure un projet typique ?",
"Project timelines vary depending on the scope and complexity. We typically complete projects within 2-8 weeks, but we always provide detailed timelines during our initial consultation.": "Les délais de projet varient selon la portée et la complexité. Nous terminons généralement les projets en 2-8 semaines, mais nous fournissons toujours des délais détaillés lors de notre consultation initiale.",
"Do you provide ongoing support?": "Fournissez-vous un support continu ?",
"Yes, we provide comprehensive ongoing support and maintenance services to ensure your continued success and satisfaction with our solutions.": "Oui, nous fournissons des services de support et de maintenance continus complets pour assurer votre succès continu et votre satisfaction avec nos solutions.",
"Why Choose Us?": "Pourquoi nous choisir ?",
"Experience": "Expérience",
"Years of industry experience and expertise": "Années d'expérience et d'expertise dans l'industrie",
"Quality": "Qualité",
"Commitment to delivering high-quality solutions": "Engagement à fournir des solutions de haute qualité",
"Support": "Support",
"Dedicated customer support and maintenance": "Support client dédié et maintenance",
"Flexibility": "Flexibilité",
"Customized solutions to meet your specific needs": "Solutions personnalisées pour répondre à vos besoins spécifiques",
"Reliability": "Fiabilité",
"Proven track record of successful project delivery": "Antécédents prouvés de livraison de projet réussie",
"Professional services with quality and reliability. We are committed to delivering excellence in everything we do.": "Services professionnels avec qualité et fiabilité. Nous nous engageons à fournir l'excellence dans tout ce que nous faisons.",
"Quick Links": "Liens rapides",
"Contact Info": "Informations de contact",
"All rights reserved.": "Tous droits réservés.",
"Privacy Policy": "Politique de confidentialité",
"Terms of Service": "Conditions de service",
"Page Not Found": "Page non trouvée",
"The page you are looking for might have been removed, had its name changed, or is temporarily unavailable.": "La page que vous recherchez a peut-être été supprimée, son nom a changé ou elle est temporairement indisponible.",
"Go to Homepage": "Aller à l'accueil",
"Server Error": "Erreur serveur",
"Something went wrong on our end. We are working to fix the issue. Please try again later.": "Quelque chose s'est mal passé de notre côté. Nous travaillons à résoudre le problème. Veuillez réessayer plus tard.",
"Contact Support": "Contacter le support",
"Please fill in all fields": "Veuillez remplir tous les champs",
"Thank you! Your message has been sent successfully.": "Merci ! Votre message a été envoyé avec succès.",
"Sorry, there was an error sending your message. Please try again.": "Désolé, une erreur s'est produite lors de l'envoi de votre message. Veuillez réessayer."
}

171
translations/nl.json Normal file
View File

@ -0,0 +1,171 @@
{
"Your Business Name": "Uw Bedrijfsnaam",
"Professional Services": "Professionele Diensten",
"Professional business website with modern design and excellent service": "Professionele bedrijfswebsite met modern design en uitstekende service",
"business, services, professional, quality": "bedrijf, diensten, professioneel, kwaliteit",
"Home": "Home",
"Services": "Diensten",
"About": "Over ons",
"Contact": "Contact",
"Professional Solutions for Your Business": "Professionele Oplossingen voor Uw Bedrijf",
"We provide high-quality services tailored to meet your business needs. Our experienced team is dedicated to delivering exceptional results.": "Wij bieden hoogwaardige diensten die zijn afgestemd op uw zakelijke behoeften. Ons ervaren team is toegewijd aan het leveren van uitzonderlijke resultaten.",
"Our Services": "Onze Diensten",
"Get Started": "Aan de slag",
"Why Choose Us": "Waarom Ons Kiezen",
"We offer comprehensive solutions with a focus on quality, reliability, and customer satisfaction.": "Wij bieden uitgebreide oplossingen met focus op kwaliteit, betrouwbaarheid en klanttevredenheid.",
"Quality Service": "Kwaliteitsservice",
"We maintain the highest standards in all our services to ensure your complete satisfaction.": "Wij handhaven de hoogste normen in al onze diensten om uw volledige tevredenheid te garanderen.",
"Timely Delivery": "Tijdige Levering",
"We understand the importance of deadlines and always deliver our services on time.": "Wij begrijpen het belang van deadlines en leveren onze diensten altijd op tijd.",
"Expert Team": "Expertteam",
"Our experienced professionals are dedicated to providing the best solutions for your business.": "Onze ervaren professionals zijn toegewijd aan het leveren van de beste oplossingen voor uw bedrijf.",
"Customer Focus": "Klantgerichtheid",
"Your success is our priority. We work closely with you to understand your specific needs.": "Uw succes is onze prioriteit. Wij werken nauw samen met u om uw specifieke behoeften te begrijpen.",
"Discover our comprehensive range of professional services designed to help your business grow.": "Ontdek ons uitgebreide aanbod van professionele diensten die zijn ontworpen om uw bedrijf te laten groeien.",
"Service 1": "Dienst 1",
"Professional service description that highlights the key benefits and features of this offering.": "Professionele dienstbeschrijving die de belangrijkste voordelen en functies van dit aanbod benadrukt.",
"Learn More": "Meer informatie",
"Service 2": "Dienst 2",
"Comprehensive solution that addresses specific business challenges and delivers measurable results.": "Uitgebreide oplossing die specifieke zakelijke uitdagingen aanpakt en meetbare resultaten levert.",
"Service 3": "Dienst 3",
"Reliable and secure service that provides peace of mind and protects your business interests.": "Betrouwbare en veilige service die gemoedsrust biedt en uw zakelijke belangen beschermt.",
"View All Services": "Alle Diensten Bekijken",
"About Our Company": "Over Ons Bedrijf",
"We are a dedicated team of professionals committed to delivering exceptional services and building long-term relationships with our clients.": "Wij zijn een toegewijd team van professionals die zich inzetten voor het leveren van uitzonderlijke diensten en het opbouwen van langdurige relaties met onze klanten.",
"With years of experience in the industry, we understand the unique challenges that businesses face and provide tailored solutions to help them succeed.": "Met jarenlange ervaring in de branche begrijpen wij de unieke uitdagingen waar bedrijven voor staan en bieden wij op maat gemaakte oplossingen om hen te helpen slagen.",
"Learn More About Us": "Meer Over Ons Leren",
"Ready to Get Started?": "Klaar om te Beginnen?",
"Contact us today to discuss your needs and discover how we can help your business grow.": "Neem vandaag nog contact met ons op om uw behoeften te bespreken en te ontdekken hoe wij uw bedrijf kunnen helpen groeien.",
"Contact Us Now": "Nu Contact Opnemen",
"Discover our comprehensive range of professional services designed to help your business grow and succeed.": "Ontdek ons uitgebreide aanbod van professionele diensten die zijn ontworpen om uw bedrijf te laten groeien en slagen.",
"What We Offer": "Wat Wij Bieden",
"We provide a wide range of services tailored to meet the diverse needs of modern businesses.": "Wij bieden een breed scala aan diensten die zijn afgestemd op de diverse behoeften van moderne bedrijven.",
"Professional service category": "Professionele dienstcategorie",
"Comprehensive service description that explains the benefits, features, and value proposition of this offering. We ensure high quality and reliable delivery.": "Uitgebreide dienstbeschrijving die de voordelen, functies en waardepropositie van dit aanbod uitlegt. Wij garanderen hoogwaardige en betrouwbare levering.",
"Feature 1 description": "Functie 1 beschrijving",
"Feature 2 description": "Functie 2 beschrijving",
"Feature 3 description": "Functie 3 beschrijving",
"Starting from $99": "Vanaf €99",
"Advanced service category": "Geavanceerde dienstcategorie",
"Advanced service offering that provides comprehensive solutions for complex business challenges. Includes detailed analysis and customized implementation.": "Geavanceerd dienstenaanbod dat uitgebreide oplossingen biedt voor complexe zakelijke uitdagingen. Omvat gedetailleerde analyse en aangepaste implementatie.",
"Advanced feature 1": "Geavanceerde functie 1",
"Advanced feature 2": "Geavanceerde functie 2",
"Advanced feature 3": "Geavanceerde functie 3",
"Starting from $199": "Vanaf €199",
"Premium service category": "Premium dienstcategorie",
"Premium service that offers the highest level of support and features. Includes dedicated resources and priority support for critical business needs.": "Premium service die het hoogste niveau van ondersteuning en functies biedt. Omvat toegewijde middelen en prioriteitsondersteuning voor kritieke zakelijke behoeften.",
"Premium feature 1": "Premium functie 1",
"Premium feature 2": "Premium functie 2",
"Premium feature 3": "Premium functie 3",
"Starting from $299": "Vanaf €299",
"Specialized service category": "Gespecialiseerde dienstcategorie",
"Specialized service designed for specific industry needs. Provides targeted solutions with deep expertise in particular business domains.": "Gespecialiseerde dienst ontworpen voor specifieke branchebehoeften. Biedt gerichte oplossingen met diepgaande expertise in bepaalde zakelijke domeinen.",
"Specialized feature 1": "Gespecialiseerde functie 1",
"Specialized feature 2": "Gespecialiseerde functie 2",
"Specialized feature 3": "Gespecialiseerde functie 3",
"Starting from $149": "Vanaf €149",
"Our Process": "Ons Proces",
"We follow a proven methodology to ensure successful project delivery and client satisfaction.": "Wij volgen een bewezen methodologie om succesvolle projectlevering en klanttevredenheid te garanderen.",
"Consultation": "Consultatie",
"We begin with a thorough consultation to understand your specific needs and requirements.": "Wij beginnen met een grondige consultatie om uw specifieke behoeften en vereisten te begrijpen.",
"Planning": "Planning",
"We develop a comprehensive plan tailored to your business objectives and timeline.": "Wij ontwikkelen een uitgebreid plan dat is afgestemd op uw zakelijke doelstellingen en tijdlijn.",
"Implementation": "Implementatie",
"Our expert team executes the plan with precision and attention to detail.": "Ons expertteam voert het plan uit met precisie en aandacht voor detail.",
"Support": "Ondersteuning",
"We provide ongoing support and maintenance to ensure continued success.": "Wij bieden voortdurende ondersteuning en onderhoud om voortdurend succes te garanderen.",
"Contact us today to discuss your specific needs and get a customized quote for our services.": "Neem vandaag nog contact met ons op om uw specifieke behoeften te bespreken en een op maat gemaakte offerte voor onze diensten te krijgen.",
"Get a Quote": "Offerte Aanvragen",
"About Us": "Over Ons",
"Learn more about our company, our mission, and the team behind our success.": "Leer meer over ons bedrijf, onze missie en het team achter ons succes.",
"Our Story": "Ons Verhaal",
"Founded with a vision to provide exceptional services and build lasting relationships with our clients.": "Opgericht met een visie om uitzonderlijke diensten te leveren en langdurige relaties met onze klanten op te bouwen.",
"We started as a small team with big dreams, determined to make a difference in the business world. Over the years, we have grown into a trusted partner for businesses of all sizes, helping them achieve their goals and overcome challenges.": "Wij begonnen als een klein team met grote dromen, vastbesloten om een verschil te maken in de zakelijke wereld. Door de jaren heen zijn wij uitgegroeid tot een vertrouwde partner voor bedrijven van alle groottes, die hen helpen hun doelen te bereiken en uitdagingen te overwinnen.",
"Our commitment to quality, innovation, and customer satisfaction has remained at the core of everything we do. We believe in building long-term partnerships based on trust, transparency, and mutual success.": "Onze toewijding aan kwaliteit, innovatie en klanttevredenheid is gebleven in de kern van alles wat wij doen. Wij geloven in het opbouwen van langdurige partnerschappen gebaseerd op vertrouwen, transparantie en wederzijds succes.",
"Years Experience": "Jaar Ervaring",
"Happy Clients": "Tevreden Klanten",
"Our Mission & Values": "Onze Missie & Waarden",
"We are guided by our core values and committed to our mission of delivering excellence.": "Wij worden geleid door onze kernwaarden en zijn toegewijd aan onze missie van het leveren van excellentie.",
"Our Mission": "Onze Missie",
"To provide innovative, reliable, and cost-effective solutions that empower businesses to achieve their full potential and drive sustainable growth in an ever-evolving market.": "Innovatieve, betrouwbare en kosteneffectieve oplossingen te bieden die bedrijven in staat stellen hun volledige potentieel te bereiken en duurzame groei te stimuleren in een steeds evoluerende markt.",
"Our Vision": "Onze Visie",
"To be the leading provider of business solutions, recognized for our expertise, integrity, and commitment to client success across all industries.": "De toonaangevende leverancier van zakelijke oplossingen te zijn, erkend voor onze expertise, integriteit en toewijding aan klantsucces in alle sectoren.",
"Excellence": "Excellentie",
"We strive for excellence in everything we do, maintaining the highest standards of quality and professionalism.": "Wij streven naar excellentie in alles wat wij doen, waarbij wij de hoogste normen van kwaliteit en professionaliteit handhaven.",
"Integrity": "Integriteit",
"We conduct business with honesty, transparency, and ethical practices, building trust with our clients and partners.": "Wij voeren zaken uit met eerlijkheid, transparantie en ethische praktijken, waarbij wij vertrouwen opbouwen met onze klanten en partners.",
"Innovation": "Innovatie",
"We embrace new ideas and technologies to provide cutting-edge solutions that meet evolving business needs.": "Wij omarmen nieuwe ideeën en technologieën om baanbrekende oplossingen te bieden die voldoen aan evoluerende zakelijke behoeften.",
"Our Team": "Ons Team",
"Meet the dedicated professionals who make our company successful.": "Maak kennis met de toegewijde professionals die ons bedrijf succesvol maken.",
"John Doe": "Jan Jansen",
"CEO & Founder": "CEO & Oprichter",
"Experienced leader with a passion for innovation and business growth.": "Ervaren leider met een passie voor innovatie en bedrijfsgroei.",
"Jane Smith": "Anna Bakker",
"Operations Manager": "Operations Manager",
"Dedicated professional ensuring smooth operations and client satisfaction.": "Toegewijde professional die zorgt voor soepele operaties en klanttevredenheid.",
"Mike Johnson": "Mark de Vries",
"Technical Lead": "Technisch Leider",
"Expert in technical solutions and innovative problem-solving approaches.": "Expert in technische oplossingen en innovatieve probleemoplossende benaderingen.",
"Sarah Wilson": "Sara Visser",
"Client Relations": "Klantrelaties",
"Committed to building strong relationships and ensuring client success.": "Toegewijd aan het opbouwen van sterke relaties en het garanderen van klantsucces.",
"Ready to Work With Us?": "Klaar om met Ons te Werken?",
"Let us help you achieve your business goals with our professional services and dedicated support.": "Laat ons u helpen uw zakelijke doelen te bereiken met onze professionele diensten en toegewijde ondersteuning.",
"Get Started Today": "Vandaag Beginnen",
"Contact Us": "Contact Opnemen",
"Get in touch with us today. We are here to help you with all your business needs.": "Neem vandaag nog contact met ons op. Wij zijn hier om u te helpen met al uw zakelijke behoeften.",
"Send Us a Message": "Stuur Ons een Bericht",
"Full Name": "Volledige Naam",
"Email Address": "E-mailadres",
"Subject": "Onderwerp",
"Message": "Bericht",
"Send Message": "Bericht Versturen",
"Get in Touch": "Contact Opnemen",
"Address": "Adres",
"123 Business Street": "Zakelijkestraat 123",
"City, State 12345": "Stad, Provincie 12345",
"Country": "Land",
"Phone": "Telefoon",
"Email": "E-mail",
"Business Hours": "Openingstijden",
"Monday - Friday": "Maandag - Vrijdag",
"9:00 AM - 6:00 PM": "9:00 - 18:00 uur",
"Saturday": "Zaterdag",
"10:00 AM - 4:00 PM": "10:00 - 16:00 uur",
"Follow Us": "Volg Ons",
"Frequently Asked Questions": "Veelgestelde Vragen",
"Find answers to common questions about our services and processes.": "Vind antwoorden op veelgestelde vragen over onze diensten en processen.",
"What services do you offer?": "Welke diensten biedt u aan?",
"We offer a comprehensive range of professional services including consulting, implementation, support, and specialized solutions tailored to meet your specific business needs.": "Wij bieden een uitgebreid aanbod van professionele diensten inclusief consultatie, implementatie, ondersteuning en gespecialiseerde oplossingen die zijn afgestemd op uw specifieke zakelijke behoeften.",
"How long does a typical project take?": "Hoe lang duurt een typisch project?",
"Project timelines vary depending on the scope and complexity. We typically complete projects within 2-8 weeks, but we always provide detailed timelines during our initial consultation.": "Projecttijdlijnen variëren afhankelijk van de omvang en complexiteit. Wij voltooien projecten meestal binnen 2-8 weken, maar wij geven altijd gedetailleerde tijdlijnen tijdens onze eerste consultatie.",
"Do you provide ongoing support?": "Biedt u voortdurende ondersteuning?",
"Yes, we provide comprehensive ongoing support and maintenance services to ensure your continued success and satisfaction with our solutions.": "Ja, wij bieden uitgebreide voortdurende ondersteuning en onderhoudsdiensten om uw voortdurende succes en tevredenheid met onze oplossingen te garanderen.",
"Why Choose Us?": "Waarom Ons Kiezen?",
"Experience": "Ervaring",
"Years of industry experience and expertise": "Jarenlange branche-ervaring en expertise",
"Quality": "Kwaliteit",
"Commitment to delivering high-quality solutions": "Toewijding aan het leveren van hoogwaardige oplossingen",
"Support": "Ondersteuning",
"Dedicated customer support and maintenance": "Toegewijde klantondersteuning en onderhoud",
"Flexibility": "Flexibiliteit",
"Customized solutions to meet your specific needs": "Op maat gemaakte oplossingen om aan uw specifieke behoeften te voldoen",
"Reliability": "Betrouwbaarheid",
"Proven track record of successful project delivery": "Bewezen staat van dienst van succesvolle projectlevering",
"Professional services with quality and reliability. We are committed to delivering excellence in everything we do.": "Professionele diensten met kwaliteit en betrouwbaarheid. Wij zijn toegewijd aan het leveren van excellentie in alles wat wij doen.",
"Quick Links": "Snelle Links",
"Contact Info": "Contactgegevens",
"All rights reserved.": "Alle rechten voorbehouden.",
"Privacy Policy": "Privacybeleid",
"Terms of Service": "Servicevoorwaarden",
"Page Not Found": "Pagina Niet Gevonden",
"The page you are looking for might have been removed, had its name changed, or is temporarily unavailable.": "De pagina die u zoekt is mogelijk verwijderd, heeft een andere naam gekregen of is tijdelijk niet beschikbaar.",
"Go to Homepage": "Ga naar Homepage",
"Server Error": "Serverfout",
"Something went wrong on our end. We are working to fix the issue. Please try again later.": "Er is iets misgegaan aan onze kant. Wij werken aan het oplossen van het probleem. Probeer het later opnieuw.",
"Contact Support": "Ondersteuning Contacten",
"Please fill in all fields": "Vul alle velden in",
"Thank you! Your message has been sent successfully.": "Bedankt! Uw bericht is succesvol verzonden.",
"Sorry, there was an error sending your message. Please try again.": "Sorry, er is een fout opgetreden bij het verzenden van uw bericht. Probeer het opnieuw."
}