inital commit

This commit is contained in:
2026-05-17 18:29:30 -05:00
parent b827236fe2
commit 7c1e18bd59
4683 changed files with 159402 additions and 1 deletions

6
.dockerignore Normal file
View File

@@ -0,0 +1,6 @@
.git
.venv
__pycache__
*.pyc
db.sqlite3
media

20
Dockerfile Normal file
View File

@@ -0,0 +1,20 @@
FROM python:3.12-slim
ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
UV_LINK_MODE=copy \
PATH="/app/.venv/bin:$PATH"
WORKDIR /app
RUN pip install --no-cache-dir uv
COPY pyproject.toml README.md /app/
RUN uv sync --no-dev
COPY . /app
RUN chmod +x /app/docker/entrypoint.sh
EXPOSE 8000
CMD ["bash", "/app/docker/entrypoint.sh"]

View File

@@ -1,2 +1,51 @@
# demo_sites # Demo Sites Builder
Django app that creates client websites in two flavors:
- Static HTML/CSS package.
- Django demo project with ecommerce scaffolding and contact/email flow.
Includes local Ollama integration for AI-generated copy and section content.
## Local setup with uv
1. Create virtual environment:
- `uv venv .venv`
2. Activate it:
- `source .venv/bin/activate`
3. Install dependencies:
- `uv sync`
4. Run migrations and seed template catalog:
- `uv run python manage.py migrate`
- `uv run python manage.py seed_templates`
5. Start dev server:
- `uv run python manage.py runserver`
## Docker
- Build and run:
- `docker compose up --build`
The app is available at `http://localhost:8000`.
By default, container points Ollama requests to `http://host.docker.internal:11434`.
## Client templates
Place purchased themes under:
- `templates/template_1/` — NeuralSync (static HTML in `Main File/NeuralSync/`)
- `templates/template_2/` — Eventio (Next.js in `eventio/eventio-HTML/`)
- `templates/template_3/` — Waves (static HTML in `site/`)
- `templates/template_4/` — Multipurpose business (static HTML in `site/`)
Run `uv run python manage.py seed_templates` after adding or changing template folders.
## Default flow
1. Sign up or log in.
2. Open dashboard.
3. Enter business details and pick one of the four templates.
4. Generate site package (copies template files + business/AI personalization).
5. Download static site zip (and optional Django ecommerce demo zip).

1
builder/__init__.py Normal file
View File

@@ -0,0 +1 @@

17
builder/admin.py Normal file
View File

@@ -0,0 +1,17 @@
from django.contrib import admin
from .models import ClientSite, TemplateOption
@admin.register(TemplateOption)
class TemplateOptionAdmin(admin.ModelAdmin):
list_display = ("name", "slug", "supports_basic", "supports_django", "is_active")
list_filter = ("supports_basic", "supports_django", "is_active")
search_fields = ("name", "slug")
@admin.register(ClientSite)
class ClientSiteAdmin(admin.ModelAdmin):
list_display = ("business_name", "owner", "status", "template_option", "created_at")
list_filter = ("status", "template_option")
search_fields = ("business_name", "owner__username", "business_phone")

6
builder/apps.py Normal file
View File

@@ -0,0 +1,6 @@
from django.apps import AppConfig
class BuilderConfig(AppConfig):
default_auto_field = "django.db.models.BigAutoField"
name = "builder"

29
builder/forms.py Normal file
View File

@@ -0,0 +1,29 @@
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from .models import ClientSite
class SignUpForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ("username", "email", "password1", "password2")
class ClientSiteForm(forms.ModelForm):
class Meta:
model = ClientSite
fields = [
"business_name",
"business_address",
"business_phone",
"business_description",
"old_website",
"template_option",
]
widgets = {
"business_description": forms.Textarea(attrs={"rows": 4}),
}

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1,49 @@
import json
from pathlib import Path
from django.core.management.base import BaseCommand
from builder.models import TemplateOption
from builder.template_registry import discover_client_templates
class Command(BaseCommand):
help = "Seed template options from templates/template_* folders and site_catalog/templates.json"
def handle(self, *args, **options):
root = Path(__file__).resolve().parents[4]
catalog_path = root / "site_catalog" / "templates.json"
discovered = {item["slug"]: item for item in discover_client_templates()}
catalog_items: dict[str, dict] = {}
if catalog_path.exists():
for item in json.loads(catalog_path.read_text(encoding="utf-8")):
catalog_items[item["slug"]] = item
merged_slugs = set(discovered) | set(catalog_items)
count = 0
for slug in sorted(merged_slugs):
discovered_item = discovered.get(slug, {})
catalog_item = catalog_items.get(slug, {})
merged = {**discovered_item, **catalog_item}
if not merged.get("source_folder"):
self.stdout.write(self.style.WARNING(f"Skipping {slug}: no source_folder."))
continue
TemplateOption.objects.update_or_create(
slug=slug,
defaults={
"name": merged.get("name", slug),
"description": merged.get("description", ""),
"supports_basic": merged.get("supports_basic", True),
"supports_django": merged.get("supports_django", True),
"source_folder": merged["source_folder"],
"is_active": merged.get("is_active", True),
},
)
count += 1
TemplateOption.objects.exclude(slug__in=merged_slugs).update(is_active=False)
self.stdout.write(self.style.SUCCESS(f"Seeded {count} template option(s)."))

View File

@@ -0,0 +1,77 @@
import django.db.models.deletion
import uuid
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name="TemplateOption",
fields=[
("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
("name", models.CharField(max_length=120)),
("slug", models.SlugField(unique=True)),
("description", models.TextField(blank=True)),
("supports_basic", models.BooleanField(default=True)),
("supports_django", models.BooleanField(default=True)),
("source_folder", models.CharField(blank=True, max_length=255)),
("is_active", models.BooleanField(default=True)),
("created_at", models.DateTimeField(auto_now_add=True)),
],
options={"ordering": ["name"]},
),
migrations.CreateModel(
name="ClientSite",
fields=[
("id", models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
("business_name", models.CharField(max_length=160)),
("business_address", models.CharField(max_length=255)),
("business_phone", models.CharField(max_length=40)),
("business_description", models.TextField()),
("old_website", models.URLField(blank=True)),
(
"status",
models.CharField(
choices=[
("draft", "Draft"),
("generating", "Generating"),
("ready", "Ready"),
("failed", "Failed"),
],
default="draft",
max_length=20,
),
),
("ai_payload", models.JSONField(blank=True, default=dict)),
("basic_zip_path", models.CharField(blank=True, max_length=255)),
("django_zip_path", models.CharField(blank=True, max_length=255)),
("last_error", models.TextField(blank=True)),
("created_at", models.DateTimeField(auto_now_add=True)),
("updated_at", models.DateTimeField(auto_now=True)),
(
"owner",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="client_sites",
to=settings.AUTH_USER_MODEL,
),
),
(
"template_option",
models.ForeignKey(
on_delete=django.db.models.deletion.PROTECT,
related_name="client_sites",
to="builder.templateoption",
),
),
],
options={"ordering": ["-created_at"]},
),
]

View File

@@ -0,0 +1 @@

51
builder/models.py Normal file
View File

@@ -0,0 +1,51 @@
import uuid
from django.conf import settings
from django.db import models
class TemplateOption(models.Model):
name = models.CharField(max_length=120)
slug = models.SlugField(unique=True)
description = models.TextField(blank=True)
supports_basic = models.BooleanField(default=True)
supports_django = models.BooleanField(default=True)
source_folder = models.CharField(max_length=255, blank=True)
is_active = models.BooleanField(default=True)
created_at = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ["name"]
def __str__(self) -> str:
return self.name
class ClientSite(models.Model):
class Status(models.TextChoices):
DRAFT = "draft", "Draft"
GENERATING = "generating", "Generating"
READY = "ready", "Ready"
FAILED = "failed", "Failed"
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
owner = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="client_sites")
template_option = models.ForeignKey(TemplateOption, on_delete=models.PROTECT, related_name="client_sites")
business_name = models.CharField(max_length=160)
business_address = models.CharField(max_length=255)
business_phone = models.CharField(max_length=40)
business_description = models.TextField()
old_website = models.URLField(blank=True)
status = models.CharField(max_length=20, choices=Status.choices, default=Status.DRAFT)
ai_payload = models.JSONField(default=dict, blank=True)
basic_zip_path = models.CharField(max_length=255, blank=True)
django_zip_path = models.CharField(max_length=255, blank=True)
last_error = models.TextField(blank=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
ordering = ["-created_at"]
def __str__(self) -> str:
return f"{self.business_name} ({self.owner})"

709
builder/services.py Normal file
View File

@@ -0,0 +1,709 @@
import html
import json
import shutil
import zipfile
from pathlib import Path
import requests
from django.conf import settings
from django.utils.text import slugify
from .models import ClientSite
from .template_registry import (
COPY_EXCLUDE_DIR_NAMES,
get_template_config,
resolve_source_path,
)
PERSONALIZE_EXTENSIONS = {".html", ".htm", ".css", ".js", ".jsx", ".md", ".txt", ".php"}
class SiteGenerator:
def __init__(self) -> None:
self.ollama_url = settings.OLLAMA_URL.rstrip("/")
self.ollama_model = settings.OLLAMA_MODEL
def build_all(self, site: ClientSite) -> ClientSite:
site_root = Path(settings.MEDIA_ROOT) / "generated" / str(site.id)
if site_root.exists():
shutil.rmtree(site_root)
site_root.mkdir(parents=True, exist_ok=True)
ai_payload = self._generate_ai_payload(site)
basic_zip = self._build_basic_site(site, ai_payload, site_root)
django_zip = self._build_django_demo(site, ai_payload, site_root)
site.ai_payload = ai_payload
site.basic_zip_path = str(basic_zip.relative_to(settings.MEDIA_ROOT))
site.django_zip_path = str(django_zip.relative_to(settings.MEDIA_ROOT))
site.status = ClientSite.Status.READY
site.last_error = ""
site.save(
update_fields=[
"ai_payload",
"basic_zip_path",
"django_zip_path",
"status",
"last_error",
"updated_at",
]
)
return site
def _generate_ai_payload(self, site: ClientSite) -> dict:
fallback = {
"tagline": f"{site.business_name} helps local customers with trusted service.",
"hero_headline": f"Welcome to {site.business_name}",
"hero_subheadline": site.business_description,
"services": [
"Professional support tailored to your business goals",
"Friendly service with clear communication",
"Fast turnaround with quality-focused delivery",
],
"testimonials": [
{"name": "Jordan T.", "quote": f"{site.business_name} made process simple and stress-free."},
{"name": "Casey M.", "quote": "Great communication, clear pricing, excellent final result."},
{"name": "Alex R.", "quote": "Reliable team. We will keep using them for future needs."},
],
"contact_prompt": "Tell us what you need and we will respond quickly.",
}
prompt = (
"You are website copy assistant. Respond in valid JSON only. "
"Use keys: tagline, hero_headline, hero_subheadline, services, testimonials, contact_prompt. "
"services must be 3 short strings. testimonials must be array of 3 objects with name and quote."
f"\nBusiness name: {site.business_name}"
f"\nBusiness description: {site.business_description}"
f"\nAddress: {site.business_address}"
f"\nPhone: {site.business_phone}"
f"\nOld website: {site.old_website or 'n/a'}"
)
try:
response = requests.post(
f"{self.ollama_url}/api/generate",
json={"model": self.ollama_model, "prompt": prompt, "stream": False},
timeout=20,
)
response.raise_for_status()
model_text = response.json().get("response", "").strip()
parsed = json.loads(model_text)
if not isinstance(parsed, dict):
return fallback
return {
"tagline": parsed.get("tagline") or fallback["tagline"],
"hero_headline": parsed.get("hero_headline") or fallback["hero_headline"],
"hero_subheadline": parsed.get("hero_subheadline") or fallback["hero_subheadline"],
"services": parsed.get("services") or fallback["services"],
"testimonials": parsed.get("testimonials") or fallback["testimonials"],
"contact_prompt": parsed.get("contact_prompt") or fallback["contact_prompt"],
}
except Exception:
return fallback
def _build_basic_site(self, site: ClientSite, ai_payload: dict, root: Path) -> Path:
basic_dir = root / "basic_site"
if basic_dir.exists():
shutil.rmtree(basic_dir)
source_path = resolve_source_path(site.template_option.source_folder)
if source_path.exists() and source_path.is_dir():
self._copy_client_template(source_path, basic_dir)
config = get_template_config(site.template_option.slug) or {}
self._personalize_template_tree(basic_dir, site, ai_payload, config)
self._write_client_readme(basic_dir, site, ai_payload, config)
basic_zip = root / "basic_site.zip"
self._zip_dir(basic_dir, basic_zip)
return basic_zip
basic_dir.mkdir(parents=True, exist_ok=True)
safe_name = html.escape(site.business_name)
safe_phone = html.escape(site.business_phone)
safe_address = html.escape(site.business_address)
safe_description = html.escape(site.business_description)
safe_tagline = html.escape(ai_payload["tagline"])
hero_title = html.escape(ai_payload["hero_headline"])
hero_sub = html.escape(ai_payload["hero_subheadline"])
services = ai_payload.get("services", [])
testimonials = ai_payload.get("testimonials", [])
nav = """
<nav>
<a href="index.html">Home</a>
<a href="about.html">About</a>
<a href="testimonials.html">Testimonials</a>
<a href="contact.html">Contact</a>
</nav>
"""
index_html = f"""<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{safe_name} | Home</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
{nav}
<header class="hero">
<h1>{hero_title}</h1>
<p>{hero_sub}</p>
<span class="tagline">{safe_tagline}</span>
</header>
<section>
<h2>What We Offer</h2>
<ul>
<li>{html.escape(services[0] if len(services) > 0 else "Quality-focused support")}</li>
<li>{html.escape(services[1] if len(services) > 1 else "Local-first service model")}</li>
<li>{html.escape(services[2] if len(services) > 2 else "Clear process from start to finish")}</li>
</ul>
</section>
</body>
</html>
"""
about_html = f"""<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{safe_name} | About</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
{nav}
<main>
<h1>About {safe_name}</h1>
<p>{safe_description}</p>
<p>Address: {safe_address}</p>
<p>Phone: {safe_phone}</p>
</main>
</body>
</html>
"""
t1 = testimonials[0] if len(testimonials) > 0 and isinstance(testimonials[0], dict) else {"name": "Client", "quote": "Great result."}
t2 = testimonials[1] if len(testimonials) > 1 and isinstance(testimonials[1], dict) else {"name": "Client", "quote": "Excellent service."}
t3 = testimonials[2] if len(testimonials) > 2 and isinstance(testimonials[2], dict) else {"name": "Client", "quote": "Would recommend."}
testimonials_html = f"""<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{safe_name} | Testimonials</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
{nav}
<main>
<h1>Testimonials</h1>
<blockquote>"{html.escape(str(t1.get("quote", "Great result.")))}" <cite>- {html.escape(str(t1.get("name", "Client")))}</cite></blockquote>
<blockquote>"{html.escape(str(t2.get("quote", "Excellent service.")))}" <cite>- {html.escape(str(t2.get("name", "Client")))}</cite></blockquote>
<blockquote>"{html.escape(str(t3.get("quote", "Would recommend.")))}" <cite>- {html.escape(str(t3.get("name", "Client")))}</cite></blockquote>
</main>
</body>
</html>
"""
contact_html = f"""<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{safe_name} | Contact</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
{nav}
<main>
<h1>Contact Us</h1>
<p>{html.escape(ai_payload["contact_prompt"])}</p>
<p>Phone: {safe_phone}</p>
<p>Address: {safe_address}</p>
</main>
</body>
</html>
"""
styles = """
body{font-family:Arial,sans-serif;margin:0;background:#f6f7fb;color:#1f2937;}
nav{display:flex;gap:1rem;padding:1rem 2rem;background:#111827;}
nav a{color:#fff;text-decoration:none;font-weight:600;}
.hero{padding:4rem 2rem;background:#2563eb;color:white;}
main,section{max-width:900px;margin:2rem auto;padding:0 1rem;}
blockquote{background:#fff;padding:1rem;border-left:4px solid #2563eb;border-radius:6px;}
.tagline{display:inline-block;margin-top:1rem;background:#1d4ed8;padding:.25rem .75rem;border-radius:999px;}
"""
(basic_dir / "index.html").write_text(index_html, encoding="utf-8")
(basic_dir / "about.html").write_text(about_html, encoding="utf-8")
(basic_dir / "testimonials.html").write_text(testimonials_html, encoding="utf-8")
(basic_dir / "contact.html").write_text(contact_html, encoding="utf-8")
(basic_dir / "styles.css").write_text(styles, encoding="utf-8")
basic_zip = root / "basic_site.zip"
self._zip_dir(basic_dir, basic_zip)
return basic_zip
def _copy_client_template(self, source_path: Path, destination: Path) -> None:
def ignore(_directory: str, names: list[str]) -> list[str]:
ignored: list[str] = []
for name in names:
if name in COPY_EXCLUDE_DIR_NAMES:
ignored.append(name)
elif name.endswith(".zip"):
ignored.append(name)
return ignored
shutil.copytree(source_path, destination, ignore=ignore)
def _personalize_template_tree(
self,
target_dir: Path,
site: ClientSite,
ai_payload: dict,
config: dict,
) -> None:
replacements = self._build_replacements(site, ai_payload, config)
for file_path in target_dir.rglob("*"):
if not file_path.is_file():
continue
if file_path.suffix.lower() not in PERSONALIZE_EXTENSIONS:
continue
if "bootstrap-icons" in file_path.parts and file_path.suffix == ".json":
continue
try:
content = file_path.read_text(encoding="utf-8")
except UnicodeDecodeError:
continue
updated = content
for old, new in replacements.items():
if old and new and old in updated:
updated = updated.replace(old, new)
if updated != content:
file_path.write_text(updated, encoding="utf-8")
info_path = target_dir / "client-site-info.json"
info_path.write_text(
json.dumps(
{
"business_name": site.business_name,
"business_address": site.business_address,
"business_phone": site.business_phone,
"business_description": site.business_description,
"old_website": site.old_website,
"ai_payload": ai_payload,
},
indent=2,
),
encoding="utf-8",
)
def _build_replacements(self, site: ClientSite, ai_payload: dict, config: dict) -> dict[str, str]:
replacements: dict[str, str] = {}
business_name = site.business_name
hero_headline = ai_payload.get("hero_headline", business_name)
hero_subheadline = ai_payload.get("hero_subheadline", site.business_description)
for token in config.get("brand_tokens", []):
replacements[token] = business_name
hero_strings = config.get("hero_strings", [])
if hero_strings:
replacements[hero_strings[0]] = hero_headline
for hero_string in hero_strings[1:]:
replacements[hero_string] = hero_subheadline
replacements.update(
{
"555-0100": site.business_phone,
"555-0101": site.business_phone,
"(555) 010-0100": site.business_phone,
"123 Main Street": site.business_address,
"San Francisco, California": site.business_address,
}
)
if site.old_website:
replacements["https://example.com"] = site.old_website
replacements["http://example.com"] = site.old_website
return replacements
def _write_client_readme(
self,
target_dir: Path,
site: ClientSite,
ai_payload: dict,
config: dict,
) -> None:
kind = config.get("kind", "static_html")
run_hint = "Open index.html in a browser."
if kind == "nextjs":
run_hint = "Run: npm install && npm run dev"
elif kind == "static_html":
run_hint = "Open index.html (or another index-*.html page) in a browser."
readme = f"""# {site.business_name} — generated site package
Template: {site.template_option.name}
Type: {kind}
## Business details
- Name: {site.business_name}
- Phone: {site.business_phone}
- Address: {site.business_address}
- Description: {site.business_description}
"""
if site.old_website:
readme += f"- Previous website: {site.old_website}\n"
readme += f"""
## AI-generated copy
- Tagline: {ai_payload.get("tagline", "")}
- Headline: {ai_payload.get("hero_headline", "")}
- Subheadline: {ai_payload.get("hero_subheadline", "")}
## How to preview
{run_hint}
See client-site-info.json for full generation payload.
"""
(target_dir / "README-CLIENT.md").write_text(readme, encoding="utf-8")
def _build_django_demo(self, site: ClientSite, ai_payload: dict, root: Path) -> Path:
project_slug = slugify(site.business_name)[:30] or "client-site"
django_dir = root / "django_demo"
django_dir.mkdir(parents=True, exist_ok=True)
files = {
"manage.py": self._django_manage_py(),
"client_demo/__init__.py": "",
"client_demo/settings.py": self._django_settings_py(site),
"client_demo/urls.py": self._django_urls_py(),
"client_demo/wsgi.py": self._django_wsgi_py(),
"shop/__init__.py": "",
"shop/apps.py": self._shop_apps_py(),
"shop/models.py": self._shop_models_py(),
"shop/forms.py": self._shop_forms_py(),
"shop/urls.py": self._shop_urls_py(),
"shop/views.py": self._shop_views_py(ai_payload),
"shop/admin.py": self._shop_admin_py(),
"shop/migrations/__init__.py": "",
"templates/base.html": self._shop_base_template(site),
"templates/shop/home.html": self._shop_home_template(),
"templates/shop/products.html": self._shop_products_template(),
"templates/shop/cart.html": self._shop_cart_template(),
"templates/shop/contact.html": self._shop_contact_template(),
"README.md": self._django_readme(project_slug),
}
for relative_path, content in files.items():
destination = django_dir / relative_path
destination.parent.mkdir(parents=True, exist_ok=True)
destination.write_text(content, encoding="utf-8")
django_zip = root / "django_demo.zip"
self._zip_dir(django_dir, django_zip)
return django_zip
def _zip_dir(self, directory: Path, output_zip: Path) -> None:
with zipfile.ZipFile(output_zip, "w", zipfile.ZIP_DEFLATED) as zipf:
for file_path in directory.rglob("*"):
if file_path.is_file():
zipf.write(file_path, file_path.relative_to(directory))
def _django_manage_py(self) -> str:
return """#!/usr/bin/env python
import os
import sys
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "client_demo.settings")
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
"""
def _django_settings_py(self, site: ClientSite) -> str:
return f"""from pathlib import Path
BASE_DIR = Path(__file__).resolve().parent.parent
SECRET_KEY = "replace-me"
DEBUG = True
ALLOWED_HOSTS = ["*"]
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"shop",
]
MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
]
ROOT_URLCONF = "client_demo.urls"
TEMPLATES = [{{
"BACKEND": "django.template.backends.django.DjangoTemplates",
"DIRS": [BASE_DIR / "templates"],
"APP_DIRS": True,
"OPTIONS": {{"context_processors": [
"django.template.context_processors.request",
"django.contrib.auth.context_processors.auth",
"django.contrib.messages.context_processors.messages",
]}},
}}]
WSGI_APPLICATION = "client_demo.wsgi.application"
DATABASES = {{"default": {{"ENGINE": "django.db.backends.sqlite3", "NAME": BASE_DIR / "db.sqlite3"}}}}
LANGUAGE_CODE = "en-us"
TIME_ZONE = "UTC"
USE_I18N = True
USE_TZ = True
STATIC_URL = "static/"
DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"
DEFAULT_FROM_EMAIL = "no-reply@example.com"
BUSINESS_NAME = {site.business_name!r}
BUSINESS_PHONE = {site.business_phone!r}
BUSINESS_ADDRESS = {site.business_address!r}
"""
def _django_urls_py(self) -> str:
return """from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path("admin/", admin.site.urls),
path("", include("shop.urls")),
]
"""
def _django_wsgi_py(self) -> str:
return """import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "client_demo.settings")
application = get_wsgi_application()
"""
def _shop_apps_py(self) -> str:
return """from django.apps import AppConfig
class ShopConfig(AppConfig):
default_auto_field = "django.db.models.BigAutoField"
name = "shop"
"""
def _shop_models_py(self) -> str:
return """from django.db import models
class Product(models.Model):
name = models.CharField(max_length=120)
description = models.TextField(blank=True)
price = models.DecimalField(max_digits=10, decimal_places=2)
is_active = models.BooleanField(default=True)
def __str__(self):
return self.name
"""
def _shop_forms_py(self) -> str:
return """from django import forms
class ContactForm(forms.Form):
name = forms.CharField(max_length=100)
email = forms.EmailField()
message = forms.CharField(widget=forms.Textarea(attrs={"rows": 5}))
"""
def _shop_urls_py(self) -> str:
return """from django.urls import path
from . import views
urlpatterns = [
path("", views.home, name="home"),
path("products/", views.products, name="products"),
path("cart/add/<int:product_id>/", views.add_to_cart, name="add_to_cart"),
path("cart/", views.cart, name="cart"),
path("contact/", views.contact, name="contact"),
]
"""
def _shop_views_py(self, ai_payload: dict) -> str:
headline = ai_payload.get("hero_headline", "Welcome")
subheadline = ai_payload.get("hero_subheadline", "")
return f"""from django.conf import settings
from django.contrib import messages
from django.core.mail import send_mail
from django.shortcuts import get_object_or_404, redirect, render
from .forms import ContactForm
from .models import Product
def home(request):
return render(request, "shop/home.html", {{
"headline": {headline!r},
"subheadline": {subheadline!r},
}})
def products(request):
return render(request, "shop/products.html", {{"products": Product.objects.filter(is_active=True)}})
def add_to_cart(request, product_id):
product = get_object_or_404(Product, id=product_id, is_active=True)
cart_data = request.session.get("cart", {{}})
key = str(product.id)
cart_data[key] = cart_data.get(key, 0) + 1
request.session["cart"] = cart_data
messages.success(request, f"Added {{product.name}} to cart.")
return redirect("products")
def cart(request):
cart_data = request.session.get("cart", {{}})
items = []
total = 0
for product_id, qty in cart_data.items():
product = Product.objects.filter(id=product_id).first()
if not product:
continue
line_total = product.price * qty
items.append({{"product": product, "qty": qty, "line_total": line_total}})
total += line_total
return render(request, "shop/cart.html", {{"items": items, "total": total}})
def contact(request):
if request.method == "POST":
form = ContactForm(request.POST)
if form.is_valid():
subject = f"Contact request for {{settings.BUSINESS_NAME}}"
body = (
f"Name: {{form.cleaned_data['name']}}\\n"
f"Email: {{form.cleaned_data['email']}}\\n\\n"
f"Message:\\n{{form.cleaned_data['message']}}"
)
send_mail(subject, body, settings.DEFAULT_FROM_EMAIL, [settings.DEFAULT_FROM_EMAIL])
messages.success(request, "Message sent.")
return redirect("contact")
else:
form = ContactForm()
return render(request, "shop/contact.html", {{"form": form}})
"""
def _shop_admin_py(self) -> str:
return """from django.contrib import admin
from .models import Product
admin.site.register(Product)
"""
def _shop_base_template(self, site: ClientSite) -> str:
return f"""<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{html.escape(site.business_name)} Demo</title>
<style>
body{{font-family:Arial,sans-serif;margin:0;background:#f5f6fb;color:#1f2937}}
nav{{background:#111827;padding:1rem;display:flex;gap:1rem}}
nav a{{color:white;text-decoration:none}}
.wrap{{max-width:960px;margin:0 auto;padding:2rem 1rem}}
.card{{background:white;padding:1rem;border-radius:8px;margin-bottom:1rem}}
.btn{{display:inline-block;background:#2563eb;color:white;padding:.5rem .75rem;border-radius:6px;text-decoration:none;border:none}}
</style>
</head>
<body>
<nav>
<a href="/">Home</a>
<a href="/products/">Products</a>
<a href="/cart/">Cart</a>
<a href="/contact/">Contact</a>
</nav>
<div class="wrap">
{{% if messages %}}
{{% for message in messages %}}<p class="card">{{{{ message }}}}</p>{{% endfor %}}
{{% endif %}}
{{% block content %}}{{% endblock %}}
</div>
</body>
</html>
"""
def _shop_home_template(self) -> str:
return """{% extends "base.html" %}
{% block content %}
<section class="card">
<h1>{{ headline }}</h1>
<p>{{ subheadline }}</p>
<a class="btn" href="/products/">Shop now</a>
</section>
{% endblock %}
"""
def _shop_products_template(self) -> str:
return """{% extends "base.html" %}
{% block content %}
<h1>Products</h1>
{% for product in products %}
<article class="card">
<h3>{{ product.name }}</h3>
<p>{{ product.description }}</p>
<p><strong>${{ product.price }}</strong></p>
<a class="btn" href="/cart/add/{{ product.id }}/">Add to cart</a>
</article>
{% empty %}
<p class="card">No products yet. Add from admin panel.</p>
{% endfor %}
{% endblock %}
"""
def _shop_cart_template(self) -> str:
return """{% extends "base.html" %}
{% block content %}
<h1>Your Cart</h1>
{% for item in items %}
<div class="card">
<strong>{{ item.product.name }}</strong> x {{ item.qty }} = ${{ item.line_total }}
</div>
{% empty %}
<p class="card">Cart empty.</p>
{% endfor %}
<p><strong>Total: ${{ total }}</strong></p>
{% endblock %}
"""
def _shop_contact_template(self) -> str:
return """{% extends "base.html" %}
{% block content %}
<h1>Contact</h1>
<form method="post" class="card">
{% csrf_token %}
{{ form.as_p }}
<button class="btn" type="submit">Send message</button>
</form>
{% endblock %}
"""
def _django_readme(self, project_slug: str) -> str:
return f"""# {project_slug}
Generated Django demo storefront.
## Run
1. pip install django
2. python manage.py migrate
3. python manage.py createsuperuser
4. python manage.py runserver
## Basic static site
Download the basic HTML package from the builder dashboard for the matching template design.
"""

View File

@@ -0,0 +1,139 @@
"""Client site template folders under project templates/template_*."""
from __future__ import annotations
from pathlib import Path
from django.conf import settings
CLIENT_TEMPLATES_ROOT = Path(settings.BASE_DIR) / "templates"
COPY_EXCLUDE_DIR_NAMES = frozenset(
{
"__MACOSX",
"Documentation",
"documentation",
"node_modules",
".git",
".next",
".gitignore",
}
)
# Per-folder config: site path relative to templates/template_N/
TEMPLATE_FOLDER_CONFIG: dict[str, dict] = {
"template_1": {
"name": "NeuralSync",
"description": "AI SaaS marketing template with multi-page layout.",
"site_path": "Main File/NeuralSync",
"kind": "static_html",
"supports_basic": True,
"supports_django": True,
"brand_tokens": ["NeuralSync"],
"hero_strings": ["Transform Your Business with AI Powered Solutions"],
},
"template_2": {
"name": "Eventio Conference",
"description": "Next.js event and conference site (requires npm to run).",
"site_path": "eventio/eventio-HTML",
"kind": "nextjs",
"supports_basic": True,
"supports_django": True,
"brand_tokens": ["Eventio", "EVENTIO"],
"hero_strings": [
"Global Business Conference",
"San Francisco, California",
],
},
"template_3": {
"name": "Waves Business",
"description": "Multi-layout business one-page template pack.",
"site_path": "site",
"kind": "static_html",
"supports_basic": True,
"supports_django": True,
"brand_tokens": ["Waves", "Welcome to Waves"],
"hero_strings": ["Welcome to Waves", "A perfect template for both corporate and creative projects."],
},
"template_4": {
"name": "Multipurpose Business",
"description": "Bootstrap business landing template with services and pricing.",
"site_path": "site",
"kind": "static_html",
"supports_basic": True,
"supports_django": True,
"brand_tokens": ["Business template", "multipurpose business template"],
"hero_strings": ["Business template"],
},
}
def _auto_detect_site_path(folder: Path) -> str | None:
site_dir = folder / "site"
if (site_dir / "index.html").exists():
return "site"
candidates: list[tuple[int, str]] = []
for index_file in folder.rglob("index.html"):
parts_lower = {part.lower() for part in index_file.parts}
if "documentation" in parts_lower:
continue
rel_parent = index_file.parent.relative_to(folder)
depth = len(rel_parent.parts)
candidates.append((depth, str(rel_parent)))
if not candidates:
return None
candidates.sort(key=lambda item: (item[0], len(item[1])))
return candidates[0][1]
def discover_client_templates() -> list[dict]:
definitions: list[dict] = []
for folder in sorted(CLIENT_TEMPLATES_ROOT.glob("template_*")):
if not folder.is_dir():
continue
folder_key = folder.name
config = TEMPLATE_FOLDER_CONFIG.get(folder_key, {})
site_path = config.get("site_path") or _auto_detect_site_path(folder)
if not site_path:
continue
source = CLIENT_TEMPLATES_ROOT / folder_key / site_path
if not source.exists():
continue
slug = folder_key.replace("_", "-")
definitions.append(
{
"slug": slug,
"name": config.get("name", folder_key.replace("_", " ").title()),
"description": config.get(
"description",
f"Client template from templates/{folder_key}/",
),
"source_folder": str(Path("templates") / folder_key / site_path),
"kind": config.get("kind", "static_html"),
"supports_basic": config.get("supports_basic", True),
"supports_django": config.get("supports_django", True),
"brand_tokens": config.get("brand_tokens", []),
"hero_strings": config.get("hero_strings", []),
"is_active": True,
}
)
return definitions
def get_template_config(slug: str) -> dict | None:
for item in discover_client_templates():
if item["slug"] == slug:
return item
return None
def resolve_source_path(source_folder: str) -> Path:
return Path(settings.BASE_DIR) / source_folder

11
builder/urls.py Normal file
View File

@@ -0,0 +1,11 @@
from django.urls import path
from . import views
urlpatterns = [
path("", views.dashboard_view, name="dashboard"),
path("create/", views.create_site_view, name="create_site"),
path("sites/<uuid:site_id>/", views.site_detail_view, name="site_detail"),
path("sites/<uuid:site_id>/download/basic/", views.download_basic_site, name="download_basic_site"),
path("sites/<uuid:site_id>/download/django/", views.download_django_site, name="download_django_site"),
]

95
builder/views.py Normal file
View File

@@ -0,0 +1,95 @@
from pathlib import Path
from django.conf import settings
from django.contrib import messages
from django.contrib.auth import login
from django.contrib.auth.decorators import login_required
from django.http import FileResponse, Http404, HttpRequest, HttpResponse
from django.shortcuts import get_object_or_404, redirect, render
from django.views.generic import TemplateView
from .forms import ClientSiteForm, SignUpForm
from .models import ClientSite, TemplateOption
from .services import SiteGenerator
class HomeView(TemplateView):
template_name = "home.html"
def signup_view(request: HttpRequest) -> HttpResponse:
if request.user.is_authenticated:
return redirect("dashboard")
if request.method == "POST":
form = SignUpForm(request.POST)
if form.is_valid():
user = form.save()
login(request, user)
return redirect("dashboard")
else:
form = SignUpForm()
return render(request, "registration/signup.html", {"form": form})
@login_required
def dashboard_view(request: HttpRequest) -> HttpResponse:
sites = ClientSite.objects.filter(owner=request.user).select_related("template_option")
form = ClientSiteForm()
form.fields["template_option"].queryset = TemplateOption.objects.filter(is_active=True)
return render(request, "builder/dashboard.html", {"sites": sites, "form": form})
@login_required
def create_site_view(request: HttpRequest) -> HttpResponse:
if request.method != "POST":
return redirect("dashboard")
form = ClientSiteForm(request.POST)
form.fields["template_option"].queryset = TemplateOption.objects.filter(is_active=True)
if not form.is_valid():
sites = ClientSite.objects.filter(owner=request.user).select_related("template_option")
return render(request, "builder/dashboard.html", {"sites": sites, "form": form})
site = form.save(commit=False)
site.owner = request.user
site.status = ClientSite.Status.GENERATING
site.save()
generator = SiteGenerator()
try:
generator.build_all(site)
messages.success(request, "Site generated successfully.")
except Exception as exc:
site.status = ClientSite.Status.FAILED
site.last_error = str(exc)
site.save(update_fields=["status", "last_error", "updated_at"])
messages.error(request, "Generation failed. Check site detail for error info.")
return redirect("site_detail", site_id=site.id)
@login_required
def site_detail_view(request: HttpRequest, site_id) -> HttpResponse:
site = get_object_or_404(ClientSite, id=site_id, owner=request.user)
return render(request, "builder/site_detail.html", {"site": site})
def _download_site_file(site: ClientSite, relative_path: str) -> FileResponse:
if not relative_path:
raise Http404("File not generated yet.")
full_path = Path(settings.MEDIA_ROOT) / relative_path
if not full_path.exists():
raise Http404("File missing from storage.")
return FileResponse(full_path.open("rb"), as_attachment=True, filename=full_path.name)
@login_required
def download_basic_site(request: HttpRequest, site_id) -> FileResponse:
site = get_object_or_404(ClientSite, id=site_id, owner=request.user)
return _download_site_file(site, site.basic_zip_path)
@login_required
def download_django_site(request: HttpRequest, site_id) -> FileResponse:
site = get_object_or_404(ClientSite, id=site_id, owner=request.user)
return _download_site_file(site, site.django_zip_path)

17
docker-compose.yml Normal file
View File

@@ -0,0 +1,17 @@
services:
web:
build: .
container_name: demo-sites-builder
command: ["bash", "/app/docker/entrypoint.sh"]
ports:
- "8014:8014"
volumes:
- .:/app
environment:
PORT: "8014"
DJANGO_DEBUG: "1"
DJANGO_SECRET_KEY: "dev-only-secret-key-change-me"
OLLAMA_URL: "http://host.docker.internal:11434"
OLLAMA_MODEL: "llama3.1"
extra_hosts:
- "host.docker.internal:host-gateway"

8
docker/entrypoint.sh Executable file
View File

@@ -0,0 +1,8 @@
#!/usr/bin/env bash
set -euo pipefail
uv sync --no-dev
uv run python manage.py migrate --noinput
uv run python manage.py seed_templates
PORT="${PORT:-8000}"
uv run python manage.py runserver "0.0.0.0:${PORT}"

16
manage.py Normal file
View File

@@ -0,0 +1,16 @@
#!/usr/bin/env python
import os
import sys
def main() -> None:
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "site_builder.settings")
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError("Django not installed or unavailable.") from exc
execute_from_command_line(sys.argv)
if __name__ == "__main__":
main()

10
pyproject.toml Normal file
View File

@@ -0,0 +1,10 @@
[project]
name = "demo-sites-builder"
version = "0.1.0"
description = "Django dashboard that generates client websites."
readme = "README.md"
requires-python = ">=3.11"
dependencies = [
"Django>=5.1,<6.0",
"requests>=2.32.0",
]

View File

@@ -0,0 +1 @@
sudo docker exec -it demo-sites-builder uv run manage.py createsuperuser

1
scripts/run.sh Normal file
View File

@@ -0,0 +1 @@
sudo docker compose up --build

1
site_builder/__init__.py Normal file
View File

@@ -0,0 +1 @@

7
site_builder/asgi.py Normal file
View File

@@ -0,0 +1,7 @@
import os
from django.core.asgi import get_asgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "site_builder.settings")
application = get_asgi_application()

89
site_builder/settings.py Normal file
View File

@@ -0,0 +1,89 @@
import os
from pathlib import Path
BASE_DIR = Path(__file__).resolve().parent.parent
SECRET_KEY = os.getenv("DJANGO_SECRET_KEY", "replace-this-in-production")
DEBUG = os.getenv("DJANGO_DEBUG", "1") == "1"
allowed_hosts_raw = os.getenv("DJANGO_ALLOWED_HOSTS", "127.0.0.1,localhost")
ALLOWED_HOSTS = [host.strip() for host in allowed_hosts_raw.split(",") if host.strip()]
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"builder",
]
MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
]
ROOT_URLCONF = "site_builder.urls"
TEMPLATES = [
{
"BACKEND": "django.template.backends.django.DjangoTemplates",
"DIRS": [BASE_DIR / "templates"],
"APP_DIRS": True,
"OPTIONS": {
"context_processors": [
"django.template.context_processors.request",
"django.contrib.auth.context_processors.auth",
"django.contrib.messages.context_processors.messages",
],
},
},
]
WSGI_APPLICATION = "site_builder.wsgi.application"
DATABASES = {
"default": {
"ENGINE": "django.db.backends.sqlite3",
"NAME": BASE_DIR / "db.sqlite3",
}
}
AUTH_PASSWORD_VALIDATORS = [
{"NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator"},
{"NAME": "django.contrib.auth.password_validation.MinimumLengthValidator"},
{"NAME": "django.contrib.auth.password_validation.CommonPasswordValidator"},
{"NAME": "django.contrib.auth.password_validation.NumericPasswordValidator"},
]
LANGUAGE_CODE = "en-us"
TIME_ZONE = "UTC"
USE_I18N = True
USE_TZ = True
STATIC_URL = "/static/"
STATIC_ROOT = BASE_DIR / "staticfiles"
STATICFILES_DIRS = [BASE_DIR / "static"]
MEDIA_URL = "/media/"
MEDIA_ROOT = BASE_DIR / "media"
DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
LOGIN_REDIRECT_URL = "dashboard"
LOGOUT_REDIRECT_URL = "home"
EMAIL_BACKEND = os.getenv(
"DJANGO_EMAIL_BACKEND",
"django.core.mail.backends.console.EmailBackend",
)
DEFAULT_FROM_EMAIL = os.getenv("DJANGO_DEFAULT_FROM_EMAIL", "no-reply@example.com")
OLLAMA_URL = os.getenv("OLLAMA_URL", "http://127.0.0.1:11434")
OLLAMA_MODEL = os.getenv("OLLAMA_MODEL", "llama3.1")

19
site_builder/urls.py Normal file
View File

@@ -0,0 +1,19 @@
from django.conf import settings
from django.conf.urls.static import static
from django.contrib import admin
from django.contrib.auth import views as auth_views
from django.urls import include, path
from builder import views as builder_views
urlpatterns = [
path("admin/", admin.site.urls),
path("", builder_views.HomeView.as_view(), name="home"),
path("signup/", builder_views.signup_view, name="signup"),
path("login/", auth_views.LoginView.as_view(template_name="registration/login.html"), name="login"),
path("logout/", auth_views.LogoutView.as_view(), name="logout"),
path("dashboard/", include("builder.urls")),
]
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

7
site_builder/wsgi.py Normal file
View File

@@ -0,0 +1,7 @@
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "site_builder.settings")
application = get_wsgi_application()

View File

@@ -0,0 +1,38 @@
[
{
"slug": "template-1",
"name": "NeuralSync",
"description": "AI SaaS marketing template with multi-page layout.",
"source_folder": "templates/template_1/Main File/NeuralSync",
"supports_basic": true,
"supports_django": true,
"is_active": true
},
{
"slug": "template-2",
"name": "Eventio Conference",
"description": "Next.js event and conference site (requires npm to run).",
"source_folder": "templates/template_2/eventio/eventio-HTML",
"supports_basic": true,
"supports_django": true,
"is_active": true
},
{
"slug": "template-3",
"name": "Waves Business",
"description": "Multi-layout business one-page template pack.",
"source_folder": "templates/template_3/site",
"supports_basic": true,
"supports_django": true,
"is_active": true
},
{
"slug": "template-4",
"name": "Multipurpose Business",
"description": "Bootstrap business landing template with services and pricing.",
"source_folder": "templates/template_4/site",
"supports_basic": true,
"supports_django": true,
"is_active": true
}
]

View File

@@ -0,0 +1,4 @@
# Clean Business
Template metadata and static assets live here.
Use this folder to store future custom HTML blocks, screenshots, and style tokens.

View File

@@ -0,0 +1,4 @@
# Modern Agency
Template metadata and static assets live here.
Use this folder to store future custom HTML blocks, screenshots, and style tokens.

65
static/styles/main.css Normal file
View File

@@ -0,0 +1,65 @@
* { box-sizing: border-box; }
body {
margin: 0;
font-family: Inter, Arial, sans-serif;
background: #f3f4f8;
color: #111827;
}
a { color: inherit; }
.container { max-width: 1100px; margin: 0 auto; padding: 1rem; }
.topbar { background: #0f172a; color: #fff; }
.brand { font-weight: 700; text-decoration: none; color: #fff; }
.row { display: flex; align-items: center; }
.between { justify-content: space-between; }
.gap { gap: .75rem; }
.button {
display: inline-block;
background: #2563eb;
color: #fff;
text-decoration: none;
border: none;
border-radius: .5rem;
padding: .6rem .9rem;
cursor: pointer;
}
.button.muted { background: #334155; }
.button.small { padding: .4rem .7rem; font-size: .85rem; }
.card {
background: #fff;
border-radius: .75rem;
padding: 1rem;
margin-bottom: 1rem;
box-shadow: 0 1px 3px rgba(0, 0, 0, .08);
}
.danger { border-left: 4px solid #b91c1c; }
.hero { padding: 2rem; }
.grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 1rem; margin-top: 1rem; }
.split { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; }
.flash {
background: #dbeafe;
border: 1px solid #93c5fd;
color: #1e3a8a;
padding: .75rem;
border-radius: .5rem;
margin: 1rem 0;
}
.list { list-style: none; margin: 0; padding: 0; }
.list-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: .75rem 0;
border-bottom: 1px solid #e5e7eb;
}
.form-card form p { margin-bottom: .8rem; }
.hint { color: #64748b; font-size: .9rem; }
.hint code { background: #e2e8f0; padding: .1rem .35rem; border-radius: .25rem; }
input, select, textarea {
width: 100%;
padding: .55rem;
border: 1px solid #cbd5e1;
border-radius: .4rem;
}
@media (max-width: 900px) {
.split { grid-template-columns: 1fr; }
}

33
templates/base.html Normal file
View File

@@ -0,0 +1,33 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{% block title %}Demo Sites Builder{% endblock %}</title>
<link rel="stylesheet" href="/static/styles/main.css">
</head>
<body>
<header class="topbar">
<div class="container row between">
<a href="/" class="brand">DemoSites AI</a>
<nav class="row gap">
{% if user.is_authenticated %}
<a href="/dashboard/">Dashboard</a>
<a href="/logout/">Logout</a>
{% else %}
<a href="/login/">Login</a>
<a href="/signup/">Sign up</a>
{% endif %}
</nav>
</div>
</header>
<main class="container">
{% if messages %}
{% for message in messages %}
<div class="flash">{{ message }}</div>
{% endfor %}
{% endif %}
{% block content %}{% endblock %}
</main>
</body>
</html>

View File

@@ -0,0 +1,33 @@
{% extends "base.html" %}
{% block title %}Dashboard{% endblock %}
{% block content %}
<div class="split">
<section class="card">
<h2>Create site</h2>
<form method="post" action="/dashboard/create/">
{% csrf_token %}
{{ form.as_p }}
<p class="hint">Templates are loaded from <code>templates/template_1</code><code>template_4</code>.</p>
<button class="button" type="submit">Generate site</button>
</form>
</section>
<section class="card">
<h2>Your generated sites</h2>
{% if sites %}
<ul class="list">
{% for site in sites %}
<li class="list-item">
<div>
<strong>{{ site.business_name }}</strong>
<p>{{ site.template_option.name }} | {{ site.status }}</p>
</div>
<a class="button small" href="/dashboard/sites/{{ site.id }}/">View</a>
</li>
{% endfor %}
</ul>
{% else %}
<p>No sites generated yet.</p>
{% endif %}
</section>
</div>
{% endblock %}

View File

@@ -0,0 +1,47 @@
{% extends "base.html" %}
{% block title %}{{ site.business_name }}{% endblock %}
{% block content %}
<section class="card">
<h1>{{ site.business_name }}</h1>
<p>Status: <strong>{{ site.status }}</strong></p>
<p>Template: {{ site.template_option.name }}</p>
{% if site.template_option.description %}
<p>{{ site.template_option.description }}</p>
{% endif %}
<p class="hint">Source: <code>{{ site.template_option.source_folder }}</code></p>
<p>Address: {{ site.business_address }}</p>
<p>Phone: {{ site.business_phone }}</p>
{% if site.old_website %}
<p>Old website: <a href="{{ site.old_website }}" target="_blank" rel="noreferrer">{{ site.old_website }}</a></p>
{% endif %}
</section>
<section class="card">
<h2>Downloads</h2>
{% if site.basic_zip_path %}
<a class="button" href="/dashboard/sites/{{ site.id }}/download/basic/">Download basic HTML site</a>
{% else %}
<p>Basic site not ready yet.</p>
{% endif %}
{% if site.django_zip_path %}
<a class="button muted" href="/dashboard/sites/{{ site.id }}/download/django/">Download Django demo site</a>
{% else %}
<p>Django demo not ready yet.</p>
{% endif %}
</section>
{% if site.ai_payload %}
<section class="card">
<h2>AI content preview</h2>
<p><strong>{{ site.ai_payload.hero_headline }}</strong></p>
<p>{{ site.ai_payload.hero_subheadline }}</p>
</section>
{% endif %}
{% if site.last_error %}
<section class="card danger">
<h2>Generation error</h2>
<pre>{{ site.last_error }}</pre>
</section>
{% endif %}
{% endblock %}

34
templates/home.html Normal file
View File

@@ -0,0 +1,34 @@
{% extends "base.html" %}
{% block title %}Build websites fast{% endblock %}
{% block content %}
<section class="hero card">
<h1>Generate client websites in minutes</h1>
<p>
Build static demo sites and full Django ecommerce demos from one dashboard.
Bring your own business details and let local Ollama produce polished copy.
</p>
<div class="row gap">
{% if user.is_authenticated %}
<a class="button" href="/dashboard/">Open dashboard</a>
{% else %}
<a class="button" href="/signup/">Create account</a>
<a class="button muted" href="/login/">Login</a>
{% endif %}
</div>
</section>
<section class="grid">
<article class="card">
<h3>Two output flavors</h3>
<p>Static HTML package and Django demo storefront.</p>
</article>
<article class="card">
<h3>Template catalog</h3>
<p>Pick from your own design template folders.</p>
</article>
<article class="card">
<h3>Local AI integration</h3>
<p>Uses Ollama endpoint for on-device content generation.</p>
</article>
</section>
{% endblock %}

View File

@@ -0,0 +1,12 @@
{% extends "base.html" %}
{% block title %}Login{% endblock %}
{% block content %}
<section class="card form-card">
<h1>Login</h1>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button class="button" type="submit">Login</button>
</form>
</section>
{% endblock %}

View File

@@ -0,0 +1,12 @@
{% extends "base.html" %}
{% block title %}Sign up{% endblock %}
{% block content %}
<section class="card form-card">
<h1>Create account</h1>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button class="button" type="submit">Sign up</button>
</form>
</section>
{% endblock %}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,170 @@
/*!
* Documenter 2.0
* http://rxa.li/documenter
*
* Copyright 2013, Xaver Birsak
* http://revaxarts.com
*
*/
html, body{max-width:100%;}
body{ padding-bottom: 40px;}
#documenter_content{
padding-top: 200px;
}
#documenter-cover{
min-height: 600px;
}
.masthead h1{
margin-top: 48px;
}
section h3,
section h4,
section h5,
section h6 {
padding: 0;
clear: both;
line-height: 1.2em;
margin-top: 2em;
}
section h3{ font-size:2em;}
section h4{ font-size:1.5em;}
section h5{ font-size:1.3em;}
section h6{ font-size:1.1em;}
section table{
border-top:1px solid;
margin: 18px 0 18px;
}
section table td, section table th{
border-bottom:1px solid;
text-align:left;
padding: 10px 10px 10px 3px;
}
section table th{
font-weight: 900;
}
hr.notop{
margin-top:3px;
}
.img-area {max-width: 100%; border: 1px solid #ddd; padding: 10px; margin: 30px 0;}
footer{
padding-bottom:500px;
}
.container{
padding-bottom:3px;
position: relative;
}
.navbar a.brand{
display:inline-block;
width:200px;
background-position:center left;
background-repeat:no-repeat;
background-size: contain;
text-indent:-9999px;
margin:0;
padding:0;
top: 0;
bottom: 0;
position: absolute;
}
.page-header{
border:0;
}
.navbar .nav {
margin: 10px 10px 0 200px;
float: none;
}
.navbar .nav li a{
border-radius:3px;
display:block;
white-space:nowrap;
padding:6px 11px 7px;
text-overflow:ellipsis;
text-decoration:none;
margin-left: 3px;
margin-bottom: 3px;
}
.navbar .nav li ul{
border-radius:5px;
display:none;
position:absolute;
list-style-type:none;
min-width:100px;
padding:3px;
box-shadow:0 0 3px rgba(0,0,0,0.3);
}
.navbar .nav > li:hover ul{
display:block;
}
.marketing-byline {
list-style:none;
margin-left: 0;
margin-bottom: 24px;
}
.marketing-byline li{
display:inline;
padding:0 2px;
}
.download-info{
clear:both;
text-align: center;
}
#intro{margin-top: 40px;
text-align: center;}
section{
margin-top:300px;
}
img{
height:auto !important;
}
iframe{
max-width:100% !important;
}
@media (max-width: 979px) {
#documenter_content{
padding-top: 0px;
}
.navbar .nav {
margin: 10px 10px 0 0;
}
.navbar .nav > li > a{
padding:6px 11px 7px;
max-width:100%;
overflow:hidden;
text-overflow:ellipsis;
}
.navbar .nav li ul{
display:none;
box-shadow:none;
position:static;
}
.navbar .nav li:hover ul{
display:block;
}
.navbar .nav li ul li{
display:block;
}
.navbar .nav li a{
max-width:100%;
}
section{
margin-top:80px;
}
}
@media (max-width: 480px) {
section{
margin-top:30px;
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 316 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 305 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 345 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 301 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 292 B

View File

@@ -0,0 +1,106 @@
## 2.0 BOOTSTRAP JS PHILOSOPHY
These are the high-level design rules which guide the development of Bootstrap's plugin apis.
---
### DATA-ATTRIBUTE API
We believe you should be able to use all plugins provided by Bootstrap purely through the markup API without writing a single line of javascript.
We acknowledge that this isn't always the most performant and sometimes it may be desirable to turn this functionality off altogether. Therefore, as of 2.0 we provide the ability to disable the data attribute API by unbinding all events on the body namespaced with `'data-api'`. This looks like this:
$('body').off('.data-api')
To target a specific plugin, just include the plugins name as a namespace along with the data-api namespace like this:
$('body').off('.alert.data-api')
---
### PROGRAMATIC API
We also believe you should be able to use all plugins provided by Bootstrap purely through the JS API.
All public APIs should be single, chainable methods, and return the collection acted upon.
$(".btn.danger").button("toggle").addClass("fat")
All methods should accept an optional options object, a string which targets a particular method, or null which initiates the default behavior:
$("#myModal").modal() // initialized with defaults
$("#myModal").modal({ keyboard: false }) // initialized with now keyboard
$("#myModal").modal('show') // initializes and invokes show immediately afterqwe2
---
### OPTIONS
Options should be sparse and add universal value. We should pick the right defaults.
All plugins should have a default object which can be modified to effect all instance's default options. The defaults object should be available via `$.fn.plugin.defaults`.
$.fn.modal.defaults = { … }
An options definition should take the following form:
*noun*: *adjective* - describes or modifies a quality of an instance
examples:
backdrop: true
keyboard: false
placement: 'top'
---
### EVENTS
All events should have an infinitive and past participle form. The infinitive is fired just before an action takes place, the past participle on completion of the action.
show | shown
hide | hidden
---
### CONSTRUCTORS
Each plugin should expose it's raw constructor on a `Constructor` property -- accessed in the following way:
$.fn.popover.Constructor
---
### DATA ACCESSOR
Each plugin stores a copy of the invoked class on an object. This class instance can be accessed directly through jQuery's data API like this:
$('[rel=popover]').data('popover') instanceof $.fn.popover.Constructor
---
### DATA ATTRIBUTES
Data attributes should take the following form:
- data-{{verb}}={{plugin}} - defines main interaction
- data-target || href^=# - defined on "control" element (if element controls an element other than self)
- data-{{noun}} - defines class instance options
examples:
// control other targets
data-toggle="modal" data-target="#foo"
data-toggle="collapse" data-target="#foo" data-parent="#bar"
// defined on element they control
data-spy="scroll"
data-dismiss="modal"
data-dismiss="alert"
data-toggle="dropdown"
data-toggle="button"
data-toggle="buttons-checkbox"
data-toggle="buttons-radio"

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,30 @@
.com { color: #93a1a1; }
.lit { color: #195f91; }
.pun, .opn, .clo { color: #93a1a1; }
.fun { color: #dc322f; }
.str, .atv { color: #D14; }
.kwd, .linenums .tag { color: #1e347b; }
.typ, .atn, .dec, .var { color: teal; }
.pln { color: #48484c; }
.prettyprint {
padding: 8px;
background-color: #f7f7f9;
border: 1px solid #e1e1e8;
}
.prettyprint.linenums {
-webkit-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
-moz-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
}
/* Specify class=linenums on a pre to get line numbering */
ol.linenums {
margin: 0 0 0 33px; /* IE indents via margin-left */
}
ol.linenums li {
padding-left: 12px;
color: #bebec5;
line-height: 18px;
text-shadow: 0 1px 0 #fff;
}

View File

@@ -0,0 +1,28 @@
var q=null;window.PR_SHOULD_USE_CONTINUATION=!0;
(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a=
[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c<i;++c){var j=f[c];if(/\\[bdsw]/i.test(j))a.push(j);else{var j=m(j),d;c+2<i&&"-"===f[c+1]?(d=m(f[c+2]),c+=2):d=j;b.push([j,d]);d<65||j>122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;c<b.length;++c)i=b[c],i[0]<=j[1]+1?j[1]=Math.max(j[1],i[1]):f.push(j=i);b=["["];o&&b.push("^");b.push.apply(b,a);for(c=0;c<
f.length;++c)i=f[c],b.push(e(i[0])),i[1]>i[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c<b;++c){var j=f[c];j==="("?++i:"\\"===j.charAt(0)&&(j=+j.substring(1))&&j<=i&&(d[j]=-1)}for(c=1;c<d.length;++c)-1===d[c]&&(d[c]=++t);for(i=c=0;c<b;++c)j=f[c],j==="("?(++i,d[i]===void 0&&(f[c]="(?:")):"\\"===j.charAt(0)&&
(j=+j.substring(1))&&j<=i&&(f[c]="\\"+d[i]);for(i=c=0;c<b;++c)"^"===f[c]&&"^"!==f[c+1]&&(f[c]="");if(a.ignoreCase&&s)for(c=0;c<b;++c)j=f[c],a=j.charAt(0),j.length>=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p<d;++p){var g=a[p];if(g.ignoreCase)l=!0;else if(/[a-z]/i.test(g.source.replace(/\\u[\da-f]{4}|\\x[\da-f]{2}|\\[^UXux]/gi,""))){s=!0;l=!1;break}}for(var r=
{b:8,t:9,n:10,v:11,f:12,r:13},n=[],p=0,d=a.length;p<d;++p){g=a[p];if(g.global||g.multiline)throw Error(""+g);n.push("(?:"+y(g)+")")}return RegExp(n.join("|"),l?"gi":"g")}function M(a){function m(a){switch(a.nodeType){case 1:if(e.test(a.className))break;for(var g=a.firstChild;g;g=g.nextSibling)m(g);g=a.nodeName;if("BR"===g||"LI"===g)h[s]="\n",t[s<<1]=y++,t[s++<<1|1]=a;break;case 3:case 4:g=a.nodeValue,g.length&&(g=p?g.replace(/\r\n?/g,"\n"):g.replace(/[\t\n\r ]+/g," "),h[s]=g,t[s<<1]=y,y+=g.length,
t[s++<<1|1]=a)}}var e=/(?:^|\s)nocode(?:\s|$)/,h=[],y=0,t=[],s=0,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=document.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);m(a);return{a:h.join("").replace(/\n$/,""),c:t}}function B(a,m,e,h){m&&(a={a:m,d:a},e(a),h.push.apply(h,a.e))}function x(a,m){function e(a){for(var l=a.d,p=[l,"pln"],d=0,g=a.a.match(y)||[],r={},n=0,z=g.length;n<z;++n){var f=g[n],b=r[f],o=void 0,c;if(typeof b===
"string")c=!1;else{var i=h[f.charAt(0)];if(i)o=f.match(i[1]),b=i[0];else{for(c=0;c<t;++c)if(i=m[c],o=f.match(i[1])){b=i[0];break}o||(b="pln")}if((c=b.length>=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m),
l=[],p={},d=0,g=e.length;d<g;++d){var r=e[d],n=r[3];if(n)for(var k=n.length;--k>=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/,
q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/,
q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g,
"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a),
a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e}
for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g<d.length;++g)e(d[g]);m===(m|0)&&d[0].setAttribute("value",
m);var r=s.createElement("OL");r.className="linenums";for(var n=Math.max(0,m-1|0)||0,g=0,z=d.length;g<z;++g)l=d[g],l.className="L"+(g+n)%10,l.firstChild||l.appendChild(s.createTextNode("\xa0")),r.appendChild(l);a.appendChild(r)}function k(a,m){for(var e=m.length;--e>=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*</.test(m)?"default-markup":"default-code";return A[a]}function E(a){var m=
a.g;try{var e=M(a.h),h=e.a;a.a=h;a.c=e.c;a.d=0;C(m,h)(a);var k=/\bMSIE\b/.test(navigator.userAgent),m=/\n/g,t=a.a,s=t.length,e=0,l=a.c,p=l.length,h=0,d=a.e,g=d.length,a=0;d[g]=s;var r,n;for(n=r=0;n<g;)d[n]!==d[n+2]?(d[r++]=d[n++],d[r++]=d[n++]):n+=2;g=r;for(n=r=0;n<g;){for(var z=d[n],f=d[n+1],b=n+2;b+2<=g&&d[b+1]===f;)b+=2;d[r++]=z;d[r++]=f;n=b}for(d.length=r;h<p;){var o=l[h+2]||s,c=d[a+2]||s,b=Math.min(o,c),i=l[h+1],j;if(i.nodeType!==1&&(j=t.substring(e,b))){k&&(j=j.replace(m,"\r"));i.nodeValue=
j;var u=i.ownerDocument,v=u.createElement("SPAN");v.className=d[a+1];var x=i.parentNode;x.replaceChild(v,i);v.appendChild(i);e<o&&(l[h+1]=i=u.createTextNode(t.substring(b,o)),x.insertBefore(i,v.nextSibling))}e=b;e>=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"],
"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"],
H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"],
J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+
I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^<?]+/],["dec",/^<!\w[^>]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),
["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css",
/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),
["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes",
hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p<h.length&&l.now()<e;p++){var n=h[p],k=n.className;if(k.indexOf("prettyprint")>=0){var k=k.match(g),f,b;if(b=
!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p<h.length?setTimeout(m,
250):a&&a()}for(var e=[document.getElementsByTagName("pre"),document.getElementsByTagName("code"),document.getElementsByTagName("xmp")],h=[],k=0;k<e.length;++k)for(var t=0,s=e[k].length;t<s;++t)h.push(e[k][t]);var e=q,l=Date;l.now||(l={now:function(){return+new Date}});var p=0,d,g=/\blang(?:uage)?-([\w.]+)(?!\S)/;m()};window.PR={createSimpleLexer:x,registerLangHandler:k,sourceDecorator:u,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit",
PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ"}})();

View File

@@ -0,0 +1,205 @@
/*
* jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
*
* Uses the built in easing capabilities added In jQuery 1.1
* to offer multiple easing options
*
* TERMS OF USE - jQuery Easing
*
* Open source under the BSD License.
*
* Copyright © 2008 George McGinley Smith
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* Neither the name of the author nor the names of contributors may be used to endorse
* or promote products derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
// t: current time, b: begInnIng value, c: change In value, d: duration
jQuery.easing['jswing'] = jQuery.easing['swing'];
jQuery.extend( jQuery.easing,
{
def: 'easeOutQuad',
swing: function (x, t, b, c, d) {
//alert(jQuery.easing.default);
return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
},
easeInQuad: function (x, t, b, c, d) {
return c*(t/=d)*t + b;
},
easeOutQuad: function (x, t, b, c, d) {
return -c *(t/=d)*(t-2) + b;
},
easeInOutQuad: function (x, t, b, c, d) {
if ((t/=d/2) < 1) return c/2*t*t + b;
return -c/2 * ((--t)*(t-2) - 1) + b;
},
easeInCubic: function (x, t, b, c, d) {
return c*(t/=d)*t*t + b;
},
easeOutCubic: function (x, t, b, c, d) {
return c*((t=t/d-1)*t*t + 1) + b;
},
easeInOutCubic: function (x, t, b, c, d) {
if ((t/=d/2) < 1) return c/2*t*t*t + b;
return c/2*((t-=2)*t*t + 2) + b;
},
easeInQuart: function (x, t, b, c, d) {
return c*(t/=d)*t*t*t + b;
},
easeOutQuart: function (x, t, b, c, d) {
return -c * ((t=t/d-1)*t*t*t - 1) + b;
},
easeInOutQuart: function (x, t, b, c, d) {
if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
return -c/2 * ((t-=2)*t*t*t - 2) + b;
},
easeInQuint: function (x, t, b, c, d) {
return c*(t/=d)*t*t*t*t + b;
},
easeOutQuint: function (x, t, b, c, d) {
return c*((t=t/d-1)*t*t*t*t + 1) + b;
},
easeInOutQuint: function (x, t, b, c, d) {
if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
return c/2*((t-=2)*t*t*t*t + 2) + b;
},
easeInSine: function (x, t, b, c, d) {
return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
},
easeOutSine: function (x, t, b, c, d) {
return c * Math.sin(t/d * (Math.PI/2)) + b;
},
easeInOutSine: function (x, t, b, c, d) {
return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
},
easeInExpo: function (x, t, b, c, d) {
return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
},
easeOutExpo: function (x, t, b, c, d) {
return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
},
easeInOutExpo: function (x, t, b, c, d) {
if (t==0) return b;
if (t==d) return b+c;
if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
},
easeInCirc: function (x, t, b, c, d) {
return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
},
easeOutCirc: function (x, t, b, c, d) {
return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
},
easeInOutCirc: function (x, t, b, c, d) {
if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
},
easeInElastic: function (x, t, b, c, d) {
var s=1.70158;var p=0;var a=c;
if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
if (a < Math.abs(c)) { a=c; var s=p/4; }
else var s = p/(2*Math.PI) * Math.asin (c/a);
return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
},
easeOutElastic: function (x, t, b, c, d) {
var s=1.70158;var p=0;var a=c;
if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
if (a < Math.abs(c)) { a=c; var s=p/4; }
else var s = p/(2*Math.PI) * Math.asin (c/a);
return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
},
easeInOutElastic: function (x, t, b, c, d) {
var s=1.70158;var p=0;var a=c;
if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5);
if (a < Math.abs(c)) { a=c; var s=p/4; }
else var s = p/(2*Math.PI) * Math.asin (c/a);
if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
},
easeInBack: function (x, t, b, c, d, s) {
if (s == undefined) s = 1.70158;
return c*(t/=d)*t*((s+1)*t - s) + b;
},
easeOutBack: function (x, t, b, c, d, s) {
if (s == undefined) s = 1.70158;
return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
},
easeInOutBack: function (x, t, b, c, d, s) {
if (s == undefined) s = 1.70158;
if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
},
easeInBounce: function (x, t, b, c, d) {
return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;
},
easeOutBounce: function (x, t, b, c, d) {
if ((t/=d) < (1/2.75)) {
return c*(7.5625*t*t) + b;
} else if (t < (2/2.75)) {
return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
} else if (t < (2.5/2.75)) {
return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
} else {
return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
}
},
easeInOutBounce: function (x, t, b, c, d) {
if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
}
});
/*
*
* TERMS OF USE - EASING EQUATIONS
*
* Open source under the BSD License.
*
* Copyright © 2001 Robert Penner
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* Neither the name of the author nor the names of contributors may be used to endorse
* or promote products derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,11 @@
/**
* jQuery.ScrollTo - Easy element scrolling using jQuery.
* Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
* Dual licensed under MIT and GPL.
* Date: 5/25/2009
* @author Ariel Flesler
* @version 1.4.2
*
* http://flesler.blogspot.co.at/2009/05/jqueryscrollto-142-released.html
*/
;(function(d){var k=d.scrollTo=function(a,i,e){d(window).scrollTo(a,i,e)};k.defaults={axis:'xy',duration:parseFloat(d.fn.jquery)>=1.3?0:1};k.window=function(a){return d(window)._scrollable()};d.fn._scrollable=function(){return this.map(function(){var a=this,i=!a.nodeName||d.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!i)return a;var e=(a.contentWindow||a).document||a.ownerDocument||a;return d.browser.safari||e.compatMode=='BackCompat'?e.body:e.documentElement})};d.fn.scrollTo=function(n,j,b){if(typeof j=='object'){b=j;j=0}if(typeof b=='function')b={onAfter:b};if(n=='max')n=9e9;b=d.extend({},k.defaults,b);j=j||b.speed||b.duration;b.queue=b.queue&&b.axis.length>1;if(b.queue)j/=2;b.offset=p(b.offset);b.over=p(b.over);return this._scrollable().each(function(){var q=this,r=d(q),f=n,s,g={},u=r.is('html,body');switch(typeof f){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(f)){f=p(f);break}f=d(f,this);case'object':if(f.is||f.style)s=(f=d(f)).offset()}d.each(b.axis.split(''),function(a,i){var e=i=='x'?'Left':'Top',h=e.toLowerCase(),c='scroll'+e,l=q[c],m=k.max(q,i);if(s){g[c]=s[h]+(u?0:l-r.offset()[h]);if(b.margin){g[c]-=parseInt(f.css('margin'+e))||0;g[c]-=parseInt(f.css('border'+e+'Width'))||0}g[c]+=b.offset[h]||0;if(b.over[h])g[c]+=f[i=='x'?'width':'height']()*b.over[h]}else{var o=f[h];g[c]=o.slice&&o.slice(-1)=='%'?parseFloat(o)/100*m:o}if(/^\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],m);if(!a&&b.queue){if(l!=g[c])t(b.onAfterFirst);delete g[c]}});t(b.onAfter);function t(a){r.animate(g,j,b.easing,a&&function(){a.call(this,n,b)})}}).end()};k.max=function(a,i){var e=i=='x'?'Width':'Height',h='scroll'+e;if(!d(a).is('html,body'))return a[h]-d(a)[e.toLowerCase()]();var c='client'+e,l=a.ownerDocument.documentElement,m=a.ownerDocument.body;return Math.max(l[h],m[h])-Math.min(l[c],m[c])};function p(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);

View File

@@ -0,0 +1,86 @@
/*!
* Documenter 2.0
* http://rxa.li/documenter
*
* Copyright 2013, Xaver Birsak
* http://revaxarts.com
*
*/
!function ($) {
$(function(){
var hash = location.hash || null,
win = $(window),
scrolloffset = $('div.navbar').height()+40,
iDeviceNotOS4 = (navigator.userAgent.match(/iphone|ipod|ipad/i) && !navigator.userAgent.match(/OS 5/i)) || false,
badIE = $('html').prop('class').match(/ie(6|7|8)/)|| false;
duration = parseInt(duration,10);
$('.dropdown-toggle').dropdown();
$(".collapse").collapse();
$(window).one('scroll', function(){
$('.navbar').scrollspy();
$('.nav').find('li.active').removeClass('active');
});
//handle external links (new window)
$('a[href^=http]').bind('click',function(){
window.open($(this).attr('href'));
return false;
});
//IE 8 and lower doesn't like the smooth pagescroll
if(!badIE){
window.scroll(0,0);
$('a[href^=#]').bind('click touchstart',function(){
hash = $(this).attr('href');
$.scrollTo.window().queue([]).stop();
goTo(hash, true);
return false;
});
//if a hash is set => go to it
if(hash){
setTimeout(function(){
goTo(hash);
},500);
}
}
$('.brand').on('click', function(){
goTo('#container', false);
});
//the function is called when the hash changes
function hashchange(){
goTo(location.hash, false);
}
//scroll to a section and set the hash
function goTo(hash,changehash){
win.unbind('hashchange', hashchange);
hash = hash.replace(/!\//,'');
win.stop().scrollTo(hash,duration,{
offset:-scrolloffset,
easing:easing,
axis:'y'
});
if(changehash !== false){
var l = location;
location.href = (l.protocol+'//'+l.host+l.pathname+'#!/'+hash.substr(1));
location.hash = hash.substr(1);
}
win.bind('hashchange', hashchange);
}
// make code pretty
window.prettyPrint && prettyPrint();
})
}(window.jQuery)

View File

@@ -0,0 +1,289 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>NeuralSync - AI-Powered SaaS Solutions for Modern Businesses HTML Template</title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="assets/css/bootstrap.css" rel="stylesheet">
<link href="assets/js/google-code-prettify/prettify.cs" rel="stylesheet">
<link href="assets/css/bootstrap-responsive.css" rel="stylesheet">
<link href="assets/css/documenter_style.css" rel="stylesheet">
<style>
html, body {
background-color: #FFFFFF;
color: #383838;
}
h1, h2, h3, h4, h5, h6 {
color: #383838;
}
section table {
background-color: #FFFFFF;
}
::-moz-selection {
background:#444444;
color:#DDDDDD;
}
::selection {
background: #444444;
color: #DDDDDD;
}
a.brand {
background-image: url(assets/images/image_1.png);
}
a, a:hover, a:active {
color: #0000FF;
}
hr {
border-top: 1px solid #EBEBEB;
border-bottom: 1px solid #FFFFFF;
}
div.navbar-inner, .navbar .nav li ul {
background: #DDDDDD;
color: #222222;
}
a.btn-navbar {
background: #DDDDDD;
color: #222222;
}
.navbar .nav li a {
color: #222222;
text-shadow: 1px 1px 0px #EEEEEE;
}
.navbar .nav li a:hover, .navbar .nav li.active a {
text-shadow: none;
}
div.navbar-inner ul {
}
.navbar .nav > li a {
color: #444444;
}
.navbar .nav > li a:hover, a.btn-navbar:hover {
background: #444444;
color: #DDDDDD;
}
.navbar .nav .active > a, .navbar .nav .active > a:hover, a.btn-navbar:active {
background-color: #444444;
color: #DDDDDD;
}
.navbar .nav li ul li a:hover {
background: #444444;
color: #DDDDDD;
}
.navbar .nav li ul li a:active {
background: #444444;
color: #DDDDDD;
}
.btn-primary {
background-image: -moz-linear-gradient(top, #0088CC, #0044CC);
background-image: -ms-linear-gradient(top, #0088CC, #0044CC);
background-image: -webkit-gradient(linear, 0 0, 0 #0088CC, from(#DDDDDD), to(#0044CC));
background-image: -webkit-linear-gradient(top, #0088CC, #0044CC);
background-image: -o-linear-gradient(top, #0088CC, #0044CC);
background-image: linear-gradient(to top, #0088CC, #0044CC);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088CC', endColorstr='#0044CC', GradientType=0);
border-color: #0044CC #0044CC #bfbfbf;
color: #FFFFFF;
}
.btn-primary:hover, .btn-primary:active, .btn-primary.active, .btn-primary.disabled, .btn-primary[disabled] {
background-color: #0044CC;
}
#documenter_copyright {
display: block !important;
visibility: visible !important;
}
</style>
</head>
<body class="documenter-project-jhilik-" data-spy="scroll" id="top">
<!-- Documentation Navbar -->
<div class="navbar navbar-fixed-top">
<div class="navbar-inner">
<div class="container"> <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </a> <a class="brand" href="#">Basur</a>
<div class="nav-collapse">
<ul class="nav">
<li><a href="#theme_installation" title="Theme Installation">Template Installation</a></li>
<li><a href="#reading_setting" title="Reading Setting">Pages</a></li>
<li><a href="#fonts" title="Fonts">Fonts</a></li>
<li><a href="#themes_options" title="Themes Options">Source File(CSS)</a></li>
<li><a href="#themes_options1" title="Themes Options1">Source File(JS)</a></li>
<li><a href="#themes_options3" title="Themes Options">Customization</a></li>
<li><a href="#thanks" title="Thanks">Thanks</a></li>
</ul>
</div>
</div>
</div>
</div>
<!-- End of Navbar -->
<!-- Main Container Beginning -->
<div class="container" id="documenter_content">
<div id="documenter-cover">
<div class="masthead">
<h1 style="text-align: center">NeuralSync - AI-Powered SaaS Solutions for Modern Businesses HTML Template</h1>
<p style="text-align: center">Created: 23 Feb, 2026</p>
<p class="download-info"> <a href="https://www.templatemonster.com/authors/themesbazer/" class="btn btn-large">24/7 Support: Send Us a message from our profile</a> </p>
</div>
<!-- masthead -->
<div id="intro">
<p class="highlight hero-unit">Thank you for purchasing my theme. If you have any questions that are beyond the scope of this help file, please feel free to open a new ticket at our <a href="https://www.templatemonster.com/authors/themesbazer/">support forum</a></p>
</div>
<!-- intro -->
</div>
<section id="theme_installation">
<div class="page-header">
<h3>Template Installation</h3>
<hr class="notop">
</div>
<p>
You can do it easy ways:
</p>
<ol>
<li>
<h5>FTP Upload:</h5>
<ul>
<li>Open up your FTP manager and connect to your hosting</li>
<li>Browse to required directory (Normally public_html).</li>
<li>Upload the files inside <strong>NeuralSync</strong> folder.</li>
</ul>
</li>
</ol>
</section>
<section id="reading_setting">
<div class="page-header">
<h3>Pages</h3>
<hr class="notop">
<ol>
<ul>
<li>index.html is for Home version One</li>
<li>service.html</li>
<li>feature.html</li>
<li>about.html</li>
<li>pricing.html</li>
<li>contact.html</li>
<li>portfolio.html</li>
</ul>
</ol>
</div>
</section>
<section id="fonts">
<div class="page-header">
<h3>Fonts</h3>
<hr class="notop">
</div>
<pre>
&lt;!--Google Font--&gt;
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap');
</pre>
</section>
<section id="themes_options">
<div class="page-header">
<h3>Source File(CSS)</h3>
<hr class="notop">
</div>
<pre>
&lt;!-- All CSS Here--&gt;
&lt;!-- Bootstrap min CSS --&gt;
&lt;link rel="stylesheet" href="assets/css/bootstrap.min.css"/&gt;
&lt;link rel="stylesheet" href="assets/font/font-awesome.min.css"/&gt;
&lt;link rel="stylesheet" href="assets/font/bootstrap-icons.min.css"/&gt;
&lt;link rel="stylesheet" href="assets/css/slick.min.css"/&gt;
&lt;link rel="stylesheet" href="assets/css/plugin.min.css"/&gt;
&lt;link rel="stylesheet" href="assets/css/theme-spacing.min.css"/&gt;
&lt;link rel="stylesheet" href="assets/css/style.css"/&gt;
&lt;link rel="stylesheet" href="assets/css/responsive.css"/&gt;
</pre>
</section>
<section id="themes_options1">
<div class="page-header">
<h3>Source File(JS)</h3>
<hr class="notop">
</div>
<pre>
&lt;!-- All JS Here--&gt;
&lt;script src="assets/js/jquery.min.js"&gt;&lt;/script&gt;
&lt;script src="assets/js/bootstrap.min.js"&gt;&lt;/script&gt;
&lt;script src="assets/js/plugin.min.js"&gt;&lt;/script&gt;
&lt;script src="assets/js/gsap.js"&gt;&lt;/script&gt;
&lt;script src="assets/js/main.js"&gt;&lt;/script&gt;</pre>
</section>
<div id="themes_options3">
<div class="page-header">
<h3>How to Change Logo</h3>
<hr class="notop"/>
<img alt="" src="assets/images/logo.png" class="img-area"/>
</div>
</div>
<div id="themes_options3">
<div class="page-header">
<h3>How to Change Contact Mail</h3>
<hr class="notop"/>
<img alt="" src="assets/images/contact.png" class="img-area"/>
</div>
</div>
<div id="themes_options5">
<div class="page-header">
<h3>How to Change Copyright</h3>
<hr class="notop">
<img alt="" src="assets/images/Copyright.png" class="img-area">
</div>
</div>
<section id="thanks">
<div class="page-header">
<h3>Thanks</h3>
<hr class="notop">
</div>
<h4 id="thanks_span_style"margin_0px_padding_0px_border_0px_outline_0px_font_weight_700_font_style_inherit_font_family_inherit_vertical_align_baseline"once_again_thankyou_for_for_purchasing_one_of_our_theme_span"><span style="margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: 700; font-style: inherit; font-family: inherit; vertical-align: baseline;">Once Again Thank you for purchasing one of our theme</span></h4>
<h2 style="margin: 0px 0px 18px; padding: 0px; border: 0px; outline: 0px; font-weight: 100; font-size: 20px; font-family: Arial, verdana, arial, sans-serif; vertical-align: baseline; color: rgb(56, 56, 56);"> Best Regards</h2>
<h3 style="margin: 18px 0px 0px; padding: 0px; border: 0px; outline: 0px; font-weight: 100; font-size: 26px; font-family: Arial, verdana, arial, sans-serif; vertical-align: baseline; color: rgb(56, 56, 56);"> ThemeBazar</h3>
</section>
<hr />
<footer>
<p>Copyright ThemeBazar 2026 made with the <a href="#">Documenter v2.0</a></p>
</footer>
</div>
<!-- /container -->
<!-- Le javascript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script>document.createElement('section');var duEkronn='500',easing='swing';</script>
<script src="assets/js/jquery.js"></script>
<script src="assets/js/jquery.scrollTo.js"></script>
<script src="assets/js/jquery.easing.js"></script>
<script src="assets/js/scripts.js"></script>
<script src="assets/js/google-code-prettify/prettify.js"></script>
<script src="assets/js/bootstrap-min.js"></script>
</body>
</html>

View File

@@ -0,0 +1,372 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Transform your business with cutting-edge AI solutions. Premium SaaS platform for startups and digital agencies.">
<title>NeuralSync - AI-Powered SaaS Solutions for Modern Businesses HTML Template</title>
<!-- Google Fonts -->
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap" rel="stylesheet">
<!-- Bootstrap 5 -->
<link rel="stylesheet" href="assets/css/bootstrap.min.css">
<!-- Bootstrap Icons -->
<link rel="stylesheet" href="assets/fonts/bootstrap-icons.min.css">
<!-- Font Awesome -->
<link rel="stylesheet" href="assets/fonts/font-awesome.min.css">
<link rel="stylesheet" href="assets/css/slick.min.css">
<link rel="stylesheet" href="assets/css/theme-spacing.min.css">
<!-- Template styles -->
<link rel="stylesheet" href="assets/css/style.css">
<link rel="stylesheet" href="assets/css/responsive.css">
</head>
<body>
<div class="page-wrapper">
<!-- START PRELOADER -->
<div class="preloader">
<div class="status">
<div class="loader">
<div class="loading-1"></div>
<div class="loading-2">Loading...</div>
</div>
</div>
</div>
<!-- END PRELOADER -->
<!-- BACK TO TOP -->
<div class="scroll-top">
<i class="bi bi-arrow-up" style="font-size: 1.5rem; color: white;"></i>
</div>
<!-- BACK TO TOP -->
<!-- Animated Background -->
<div class="animated-bg"></div>
<!-- Navigation -->
<nav class="navbar navbar-expand-lg fixed-top">
<div class="container">
<a class="navbar-brand" href="index.html"><i class="fa-light fa-sparkles mr-5"></i>NeuralSync</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 ms-auto align-items-center">
<li class="nav-item"><a class="nav-link" href="index.html">Home</a></li>
<li class="nav-item"><a class="nav-link" href="features.html">Features</a></li>
<li class="nav-item"><a class="nav-link" href="about.html">About</a></li>
<li class="nav-item"><a class="nav-link" href="portfolio.html">Portfolio</a></li>
<li class="nav-item"><a class="nav-link" href="pricing.html">Pricing</a></li>
<li class="nav-item"><a class="nav-link" href="contact.html">Contact</a></li>
<li class="nav-item ms-3">
<button class="btn-primary-gradient">Get Started</button>
</li>
</ul>
</div>
</div>
</nav>
<main>
<!-- START BREADCRUMB -->
<section class="breadcrumb-area position-relative black-bg breadcrumb-cover-bg breadcrumb-spacing breadcrumb-bg-attach);">
<div class="container">
<div class="row justify-content-center text-center">
<div class="col-xxl-12">
<div class="breadcrumb-content p-relative z-index-2">
<div class="breadcrumb-single-content mb-10">
<span><a href="index.html"><i class="fa-light fa-house fa-fade me-2"></i>HOME</a></span>
<span class="breadcrumb-sub-title">ABOUT</span>
</div>
<h3 class="breadcrumb-title split-content end">About Us</h3>
</div>
</div>
</div>
</div>
</section>
<!-- END BREADCRUMB -->
<!-- About / Why Choose Us -->
<section class="atf-section-padding" id="about">
<div class="container">
<div class="row align-items-center">
<div class="col-lg-6">
<div class="section-title mb-30 text-start">
<h2 class="title text-start mb-4 split-content up">Why Choose NeuralSync?</h2>
<p class="text-secondary" style="font-size: 1.1rem;">We're not just another SaaS platform. We're your innovation partner, combining cutting-edge AI technology with intuitive design to deliver exceptional results.</p>
</div>
<div class="about-content">
<div class="mb-4">
<h3 class="mb-3"><i class="fa-light fa-badge-check mr-5 text-info"></i> Innovation First</h3>
<p class="text-secondary">Stay ahead with bleeding-edge AI technology that evolves with your needs.</p>
</div>
<div class="mb-4">
<h3 class="mb-3"><i class="fa-light fa-badge-check mr-5 text-info"></i> Scalable Architecture</h3>
<p class="text-secondary">From startup to enterprise - our infrastructure grows seamlessly with your business.</p>
</div>
<div class="mb-4">
<h3 class="mb-3"><i class="fa-light fa-badge-check mr-5 text-info"></i> World-Class Support</h3>
<p class="text-secondary">24/7 expert support team ready to help you succeed at every step.</p>
</div>
</div>
<button class="btn-primary-gradient mt-3">DESCOVER MORE</button>
</div>
<div class="col-lg-6 zoomIn mt-lg-40">
<div class="glass-card p-4">
<svg viewBox="0 0 400 300" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="chartGrad" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" style="stop-color:#667eea;stop-opacity:0.8" />
<stop offset="100%" style="stop-color:#667eea;stop-opacity:0.1" />
</linearGradient>
</defs>
<path d="M 20 250 L 80 200 L 140 180 L 200 120 L 260 100 L 320 50 L 380 30"
stroke="#00f2ff" stroke-width="3" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 20 250 L 80 200 L 140 180 L 200 120 L 260 100 L 320 50 L 380 30 L 380 300 L 20 300 Z"
fill="url(#chartGrad)"/>
<circle cx="80" cy="200" r="6" fill="#00f2ff">
<animate attributeName="r" values="6;10;6" dur="2s" repeatCount="indefinite"/>
</circle>
<circle cx="200" cy="120" r="6" fill="#00f2ff">
<animate attributeName="r" values="6;10;6" dur="2.5s" repeatCount="indefinite"/>
</circle>
<circle cx="320" cy="50" r="6" fill="#00f2ff">
<animate attributeName="r" values="6;10;6" dur="3s" repeatCount="indefinite"/>
</circle>
</svg>
</div>
</div>
</div>
</div>
</section>
<!-- Stats Section -->
<div>
<div class="container">
<div class="stats-section">
<div class="row">
<div class="col-md-3 col-6 mb-4 mb-md-0 fadeInLeft">
<div class="stat-item">
<div class="stat-number"><span class="counter-value">10</span>K+</div>
<div class="stat-label">Active Users</div>
</div>
</div>
<div class="col-md-3 col-6 mb-4 mb-md-0 fadeInUp">
<div class="stat-item">
<div class="stat-number"><span class="counter-value">99</span>.9%</div>
<div class="stat-label">Uptime SLA</div>
</div>
</div>
<div class="col-md-3 col-6 fadeInUp">
<div class="stat-item">
<div class="stat-number"><span class="counter-value">50</span>M+</div>
<div class="stat-label">API Requests</div>
</div>
</div>
<div class="col-md-3 col-6 fadeInRight">
<div class="stat-item">
<div class="stat-number"><span class="counter-value">24</span>/7</div>
<div class="stat-label">Support</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Product Showcase -->
<section class="atf-section-padding">
<div class="container">
<div class="section-title mb-50 text-center">
<h2 class="title split-content start">Experience the Platform</h2>
<p class="section-subtitle fade-in">
A beautiful, intuitive dashboard designed for power users and beginners alike
</p>
</div>
<div class="dashboard-mockup spread zoom-out">
<svg viewBox="0 0 1200 700" xmlns="http://www.w3.org/2000/svg">
<!-- Dashboard Background -->
<rect width="1200" height="700" fill="#1e293b" rx="20"/>
<!-- Header -->
<rect width="1200" height="60" fill="#0f172a"/>
<text x="30" y="38" font-family="Inter, sans-serif" font-size="24" font-weight="bold" fill="#667eea">NeuralSync</text>
<!-- Header Icons -->
<foreignObject x="1050" y="10" width="140" height="40">
<div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;justify-content:flex-end;gap:10px;align-items:center;">
<i class="bi bi-bell-fill" style="color:#667eea;font-size:20px;"></i>
<i class="bi bi-gear-fill" style="color:#667eea;font-size:20px;"></i>
<i class="bi bi-person-circle" style="color:#667eea;font-size:20px;"></i>
</div>
</foreignObject>
<!-- Sidebar -->
<rect x="0" y="60" width="240" height="640" fill="#0f172a"/>
<rect x="20" y="100" width="200" height="40" rx="10" fill="#667eea" opacity="0.2"/>
<rect x="20" y="160" width="200" height="40" rx="10" fill="#334155"/>
<rect x="20" y="220" width="200" height="40" rx="10" fill="#334155"/>
<foreignObject x="30" y="105" width="180" height="40">
<div xmlns="http://www.w3.org/1999/xhtml" style="color:white;font-weight:600;font-family:Inter,sans-serif;">
<i class="bi bi-speedometer2 mr-5"></i> Dashboard
</div>
</foreignObject>
<foreignObject x="30" y="165" width="180" height="40">
<div xmlns="http://www.w3.org/1999/xhtml" style="color:white;font-weight:600;font-family:Inter,sans-serif;">
<i class="bi bi-people-fill mr-5"></i> Users
</div>
</foreignObject>
<foreignObject x="30" y="225" width="180" height="40">
<div xmlns="http://www.w3.org/1999/xhtml" style="color:white;font-weight:600;font-family:Inter,sans-serif;">
<i class="bi bi-bar-chart-fill mr-5"></i> Analytics
</div>
</foreignObject>
<!-- Main Content Area -->
<rect x="260" y="80" width="920" height="600" fill="#1e293b" rx="15"/>
<!-- Cards -->
<rect x="280" y="100" width="280" height="180" rx="15" fill="#334155"/>
<foreignObject x="300" y="120" width="240" height="40">
<div xmlns="http://www.w3.org/1999/xhtml" style="color:white;font-weight:600;font-family:Inter,sans-serif;">
<i class="bi bi-graph-up mr-5"></i> Sales Overview
</div>
</foreignObject>
<rect x="580" y="100" width="280" height="180" rx="15" fill="#334155"/>
<foreignObject x="600" y="120" width="240" height="40">
<div xmlns="http://www.w3.org/1999/xhtml" style="color:white;font-weight:600;font-family:Inter,sans-serif;">
<i class="bi bi-people mr-5"></i> Active Users
</div>
</foreignObject>
<rect x="880" y="100" width="280" height="180" rx="15" fill="#334155"/>
<foreignObject x="900" y="120" width="240" height="40">
<div xmlns="http://www.w3.org/1999/xhtml" style="color:white;font-weight:600;font-family:Inter,sans-serif;">
<i class="bi bi-wallet-fill mr-5"></i> Revenue
</div>
</foreignObject>
<!-- Chart Area -->
<rect x="280" y="300" width="880" height="360" rx="15" fill="#334155"/>
<path d="M 320 600 L 380 550 L 440 520 L 500 480 L 560 450 L 620 420 L 680 380 L 740 360 L 800 340 L 860 320 L 920 300 L 925 305 L 930 310 L 1100 315"
stroke="#667eea" stroke-width="3" fill="none" stroke-linecap="round"/>
<!-- Glowing Elements -->
<circle cx="420" cy="200" r="30" fill="#667eea" opacity="0.6">
<animate attributeName="opacity" values="0.3;0.8;0.3" dur="2s" repeatCount="indefinite"/>
</circle>
<circle cx="720" cy="200" r="30" fill="#00f2ff" opacity="0.6">
<animate attributeName="opacity" values="0.3;0.8;0.3" dur="2.5s" repeatCount="indefinite"/>
</circle>
<circle cx="1020" cy="200" r="30" fill="#764ba2" opacity="0.6">
<animate attributeName="opacity" values="0.3;0.8;0.3" dur="3s" repeatCount="indefinite"/>
</circle>
</svg>
</div>
</div>
</section>
</main>
<footer>
<!-- Footer -->
<div class="footer">
<div class="container">
<div class="row g-4">
<div class="col-lg-4 col-md-6 fadeInLeft">
<h3 class="navbar-brand mb-50"><i class="fa-light fa-sparkles mr-5"></i>NeuralSync</h3>
<p class="text-secondary mb-4">Empowering businesses with cutting-edge AI technology to automate, analyze, and accelerate growth in the digital age.</p>
<div class="social-links">
<a href="#"><i class="fab fa-x-twitter"></i></a>
<a href="#"><i class="bi bi-linkedin"></i></a>
<a href="#"><i class="bi bi-github"></i></a>
<a href="#"><i class="bi bi-instagram"></i></a>
</div>
</div>
<div class="col-lg-2 col-md-6 fadeInUp">
<h3>Product</h3>
<ul>
<li><a href="#features">Features</a></li>
<li><a href="#pricing">Pricing</a></li>
<li><a href="#">Security</a></li>
<li><a href="#">Integrations</a></li>
<li><a href="#">API Docs</a></li>
</ul>
</div>
<div class="col-lg-2 col-md-6 fadeInUp">
<h3>Company</h3>
<ul>
<li><a href="#about">About Us</a></li>
<li><a href="#">Careers</a></li>
<li><a href="#">Blog</a></li>
<li><a href="#">Press Kit</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</div>
<div class="col-lg-2 col-md-6 fadeInUp">
<h3>Resources</h3>
<ul>
<li><a href="#">Documentation</a></li>
<li><a href="#">Tutorials</a></li>
<li><a href="#">Community</a></li>
<li><a href="#">Support</a></li>
<li><a href="#">Status</a></li>
</ul>
</div>
<div class="col-lg-2 col-md-6 fadeInRight">
<h3>Legal</h3>
<ul>
<li><a href="#">Privacy Policy</a></li>
<li><a href="#">Terms of Service</a></li>
<li><a href="#">Cookie Policy</a></li>
<li><a href="#">GDPR</a></li>
</ul>
</div>
</div>
<hr style="border-color: rgba(255,255,255,0.1); margin: 3rem 0 2rem;">
<div class="row align-items-center">
<div class="col-md-6 text-center text-md-start mb-3 mb-md-0">
<p class="text-secondary mb-0">&copy; 2026 NeuralSync. All rights reserved.</p>
</div>
<div class="col-md-6 text-center text-md-end">
<p class="text-secondary mb-0">Made with <span style="color: #f093fb;">?</span> for innovators worldwide</p>
</div>
</div>
</div>
</div>
</footer>
</div>
<!-- END PRELOADER -->
<!-- jQuery, Bootstrap, GSAP -->
<script src="assets/js/jquery.min.js"></script>
<!-- Latest compiled and minified Bootstrap -->
<script src="assets/js/bootstrap.min.js"></script>
<script src="assets/js/plugin.min.js"></script>
<script src="assets/js/gsap.js"></script>
<!-- Template scripts -->
<script src="assets/js/main.js"></script>
</body>
</html>

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,65 @@
@media only screen and (max-width : 2500px) {
.page-wrapper{
overflow:hidden;
}
}
@media screen and (min-width: 1200px) and (max-width: 1399px){
.stat-number {
font-size: 3rem;
}
.breadcrumb-title{
font-size:44px;
}
}
@media screen and (min-width: 992px) and (max-width: 1199px){
.stat-number {
font-size: 2.5rem;
}
.breadcrumb-title{
font-size:44px;
}
}
@media only screen and (max-width : 1199px) {
.mt-xl-40{
margin-top:40px;
}
.mb-xl-40{
margin-bottom:40px;
}
}
@media only screen and (max-width : 991px) {
.mt-lg-40{
margin-top:40px;
}
.mb-lg-40{
margin-bottom:40px;
}
.stat-number {
font-size: 2.5rem;
}
.breadcrumb-title{
font-size:36px;
letter-spacing:0;
line-height:1.3;
}
}
@media only screen and (max-width: 767px) {
.mt-lg-40{
margin-top:25px;
}
.mb-lg-40{
margin-bottom:25px;
}
}
@media screen and (min-width: 320px) and (max-width: 575px){
.faq-question {
font-size: 1.2rem ! important;
font-weight: 500;
}
}

View File

@@ -0,0 +1,2 @@
.slick-slider{position:relative;display:block;box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none;-khtml-user-select:none;-ms-touch-action:pan-y;touch-action:pan-y;-webkit-tap-highlight-color:transparent}.slick-list{position:relative;display:block;overflow:hidden;margin:0;padding:0}.slick-list:focus{outline:0}.slick-list.dragging{cursor:pointer;cursor:hand}.slick-slider .slick-list,.slick-slider .slick-track{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.slick-track{position:relative;top:0;left:0;display:block;margin-left:auto;margin-right:auto}.slick-track:after,.slick-track:before{display:table;content:''}.slick-track:after{clear:both}.slick-loading .slick-track{visibility:hidden}.slick-slide{display:none;float:left;height:100%;min-height:1px}[dir=rtl] .slick-slide{float:right}.slick-slide img{display:block}.slick-slide.slick-loading img{display:none}.slick-slide.dragging img{pointer-events:none}.slick-initialized .slick-slide{display:block}.slick-loading .slick-slide{visibility:hidden}.slick-vertical .slick-slide{display:block;height:auto;border:1px solid transparent}.slick-arrow.slick-hidden{display:none}
/*# sourceMappingURL=slick.min.css.map */

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,255 @@
/*
|-----------------------------------------------------
| Template Name: NeuralSync - AI-Powered SaaS Solutions for Modern Businesses HTML Template
| Developer: Themesfamily
| Version: 1.0.0
|-----------------------------------------------------
*/
/***************************************************
==================== JS ======================
****************************************************
00. Configuration Check
01. GSAP Plugin Registration
02. LENIS SMOOTH SCROLLING
03. TEAM Social Icon Toggle
04. GSAP Custom Cursor Implementation
05. GSAP Text Split Animation
06. GSAP Image Spread / Reveal Animation
07. GSAP 3D Scale and Fade Animation
08. GSAP Dynamic Fade-In Animations (General)
09. GSAP Parallax Zoom Animation
10. MAIN INITIALIZATION FUNCTION
****************************************************/
(function ($) {
"use strict";
// 00. Configuration Check
if (typeof gsap === 'undefined' || typeof jQuery === 'undefined' || typeof Lenis === 'undefined') {
console.error("Required libraries (GSAP, jQuery, or Lenis) are not loaded. Skipping all animations.");
return;
}
// 01. GSAP Plugin Registration
if (typeof SplitText !== 'undefined' && typeof ScrollTrigger !== 'undefined') {
gsap.registerPlugin(ScrollTrigger, SplitText);
} else {
console.warn("GSAP plugins (SplitText or ScrollTrigger) are not loaded. Some animations may be skipped.");
}
// ----------------------------------------------------------------------------------
// 02. LENIS SMOOTH SCROLLING
// ----------------------------------------------------------------------------------
new Lenis({
autoRaf: true
});
// ----------------------------------------------------------------------------------
// 05. GSAP Text Split Animation
// ----------------------------------------------------------------------------------
function initSplitTextAnimations() {
const st = $(".split-content");
if (st.length > 0 && typeof SplitText !== 'undefined') {
st.each(function (index, el) {
el.split = new SplitText(el, {
type: "lines,words,chars",
linesClass: "atf-split-line",
});
// Set initial position based on class (end, start, up, down)
let initialProps = { opacity: 0 };
if ($(el).hasClass("end")) initialProps.x = "50";
else if ($(el).hasClass("start")) initialProps.x = "-50";
else if ($(el).hasClass("up")) initialProps.y = "80";
else if ($(el).hasClass("down")) initialProps.y = "-80";
gsap.set(el.split.chars, initialProps);
gsap.set(el, { perspective: 400 });
// Create ScrollTrigger animation timeline
gsap.to(el.split.chars, {
scrollTrigger: {
trigger: el,
start: "top 85%",
end: "bottom 65%",
scrub: 1,
},
x: "0",
y: "0",
rotateX: "0",
scale: 1,
opacity: 1,
autoAlpha: 1,
duration: 1,
ease: 'power2.out',
stagger: 0.03,
});
});
}
}
// ----------------------------------------------------------------------------------
// 06. GSAP Image Spread / Reveal Animation
// ----------------------------------------------------------------------------------
function initImageSpreadAnimations() {
document.querySelectorAll(".spread").forEach((container) => {
let image = container.querySelector("img");
if (!image) return;
let tl = gsap.timeline({
scrollTrigger: {
trigger: container,
toggleActions: "play none none none",
},
});
tl.set(container, { autoAlpha: 1 });
if (container.classList.contains("zoom-out")) {
tl.from(image, { duration: 1.5, scale: 1.4, ease: "power2.out" });
} else if (container.classList.contains("start") || container.classList.contains("end")) {
let xPercent = container.classList.contains("start") ? -100 : 100;
tl.from(container, {
duration: 1.5,
xPercent,
ease: Power2.out,
});
tl.from(image, {
duration: 1.5,
xPercent: -xPercent,
scale: 1,
delay: -1.5,
ease: Power2.out,
});
}
else if (container.classList.contains("up") || container.classList.contains("down")) {
let yPercent = container.classList.contains("up") ? 100 : -100;
tl.from(container, {
duration: 1.5,
yPercent,
ease: Power2.out,
});
tl.from(image, {
duration: 1.5,
yPercent: -yPercent,
scale: 1,
delay: -1.5,
ease: Power2.out,
});
}
});
}
// ----------------------------------------------------------------------------------
// 07. GSAP 3D Scale and Fade Animation
// ----------------------------------------------------------------------------------
function initScale3DAnimations() {
gsap.utils.toArray(".item-3d").forEach((el) => {
// Initial 3D transform set
gsap.set(el, {
opacity: 0.7,
transform: "perspective(2500px) translate3d(0,0,0) rotateX(90deg) scale(0.5)",
});
// ScrollTrigger timeline to reveal 3D item
gsap.timeline({
scrollTrigger: {
trigger: el,
start: "top bottom+=50",
end: "bottom center",
scrub: 2,
},
}).to(el, {
scale: 1,
rotateX: 0,
opacity: 1,
duration: 1.3,
ease: "power2.out",
});
});
}
// ----------------------------------------------------------------------------------
// 08. GSAP Dynamic Fade-In Animations (General)
// ----------------------------------------------------------------------------------
function initDynamicFadeAnimations() {
[
".fadeInUp", ".fadeInLeft", ".fadeInRight", ".zoomIn", ".zoomOut", ".bounceIn"
].forEach((selector) => {
gsap.utils.toArray(selector).forEach((el) => {
let offset = el.getAttribute("data-fade-offset") || 40;
let duration = el.getAttribute("data-duration") || 0.8;
let from = el.getAttribute("data-fade-from") || (
selector === ".fadeInLeft" ? "left" :
selector === ".fadeInRight" ? "right" :
selector.includes("zoom") || selector === ".bounceIn" ? "center" :
"bottom"
);
let onScroll = el.getAttribute("data-on-scroll") || 1;
let delay = el.getAttribute("data-delay") || 0.15;
let props = {
opacity: 0,
duration,
delay,
ease: el.getAttribute("data-ease") || (
selector === ".bounceIn" ? "bounce.out" : "power2.out"
),
x: from === "left" ? -offset : from === "right" ? offset : 0,
y: from === "top" ? -offset : from === "bottom" ? offset : 0,
scale: selector === ".zoomIn" ? 0.5 : selector === ".zoomOut" ? 1.5 : 1,
};
// Add ScrollTrigger if onScroll is enabled
if (onScroll == 1) {
props.scrollTrigger = { trigger: el, start: "top 85%" };
}
gsap.from(el, props);
});
});
}
// ----------------------------------------------------------------------------------
// 09. GSAP Parallax Zoom Animation
// ----------------------------------------------------------------------------------
function initParallaxZoom() {
document.querySelectorAll(".item-up-image").forEach((wrap) => {
gsap.timeline({
scrollTrigger: {
trigger: wrap,
start: "top center",
end: "bottom center",
scrub: 1,
},
}).to(wrap.querySelector(".item-up"), {
scale: 1.10,
duration: 1,
});
});
}
// ----------------------------------------------------------------------------------
// 10. MAIN INITIALIZATION FUNCTION
// ----------------------------------------------------------------------------------
function initAllScripts() {
// Initialize all DOM-dependent functions
initSplitTextAnimations();
initImageSpreadAnimations();
initScale3DAnimations();
initDynamicFadeAnimations();
initParallaxZoom();
console.log("All NeuralSync animations initialized successfully.");
}
// Execute the main function (assuming script is placed before </body>)
initAllScripts();
})(jQuery);

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,238 @@
/* =====================================================
NovaAI - Premium Template Script
Clean | Optimized | Reviewer Ready
===================================================== */
(function ($) {
"use strict";
/* ===============================
Helper: Safe Query Selector
=============================== */
const $select = (selector) => document.querySelector(selector);
const $selectAll = (selector) => document.querySelectorAll(selector);
/* ===============================
Sticky Navbar + Scroll Top
=============================== */
const navbar = $select('.navbar');
const scrollTopBtn = $select('.scroll-top');
window.addEventListener('scroll', function () {
// Sticky Navbar
if (navbar) {
if (window.scrollY > 50) {
navbar.classList.add('scrolled');
} else {
navbar.classList.remove('scrolled');
}
}
// Scroll Top Button Visibility
if (scrollTopBtn) {
if (window.scrollY > 300) {
scrollTopBtn.classList.add('visible');
} else {
scrollTopBtn.classList.remove('visible');
}
}
});
// Scroll To Top Click
if (scrollTopBtn) {
scrollTopBtn.addEventListener('click', function () {
window.scrollTo({
top: 0,
behavior: 'smooth'
});
});
}
/* ===============================
Preloader
=============================== */
$(window).on("load", function () {
$(".status").fadeOut();
$(".preloader").delay(300).fadeOut("slow");
});
/* ===============================
Smooth Scroll (Anchor Links)
=============================== */
$selectAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function (e) {
const targetID = this.getAttribute('href');
if (targetID.length > 1) {
const target = $select(targetID);
if (target) {
e.preventDefault();
target.scrollIntoView({
behavior: 'smooth',
block: 'start'
});
}
}
});
});
/* ===============================
Fade In Animation (IntersectionObserver)
=============================== */
const fadeElements = $selectAll('.fade-in');
if (fadeElements.length) {
const fadeObserver = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('visible');
fadeObserver.unobserve(entry.target);
}
});
}, {
threshold: 0.15
});
fadeElements.forEach(el => fadeObserver.observe(el));
}
/* ===============================
FAQ Toggle
=============================== */
$selectAll('.faq-question').forEach(question => {
question.addEventListener('click', function () {
const answer = this.nextElementSibling;
const icon = this.querySelector('i');
if (!answer) return;
// Close others
$selectAll('.faq-answer').forEach(item => {
if (item !== answer) {
item.classList.remove('active');
}
});
$selectAll('.faq-question i').forEach(i => {
if (i !== icon) {
i.classList.remove('bi-chevron-up');
i.classList.add('bi-chevron-down');
}
});
// Toggle current
answer.classList.toggle('active');
if (icon) {
icon.classList.toggle('bi-chevron-up');
icon.classList.toggle('bi-chevron-down');
}
});
});
/* ===============================
Newsletter Form
=============================== */
const newsletterForm = $select('.newsletter-form');
if (newsletterForm) {
newsletterForm.addEventListener('submit', function (e) {
e.preventDefault();
const emailInput = this.querySelector('input[type="email"]');
if (!emailInput) return;
alert("Thank you! We'll keep you updated.");
this.reset();
});
}
/* ===============================
Contact Form
=============================== */
const contactForm = $select('.contact-form');
if (contactForm) {
contactForm.addEventListener('submit', function (e) {
e.preventDefault();
alert("Message sent successfully!");
this.reset();
});
}
/* ===============================
Close Mobile Menu on Link Click
=============================== */
$selectAll('.navbar-nav .nav-link').forEach(link => {
link.addEventListener('click', () => {
const navbarCollapse = $select('.navbar-collapse');
if (navbarCollapse && navbarCollapse.classList.contains('show')) {
const bsCollapse = new bootstrap.Collapse(navbarCollapse);
bsCollapse.hide();
}
});
});
/*--------------------------------------------------------------
START counter JS
--------------------------------------------------------------*/
$('.counter-value').counterUp({
delay: 10,
time: 1000
});
/*Start Blog Design*/
$('.atf_client-slider').slick({
arrows: true,
dots: false,
infinite: true,
speed: 300,
slidesToShow: 3,
slidesToScroll: 1,
prevArrow: '<a class="slick-prev"><i class="fa-light fa-arrow-left" alt="Arrow Icon"></i></a>',
nextArrow: '<a class="slick-next"><i class="fa-light fa-arrow-right" alt="Arrow Icon"></i></a>',
responsive: [
{
breakpoint: 1200,
settings: {
slidesToShow: 2,
slidesToScroll: 1,
arrows: false,
dots: true
}
},
{
breakpoint: 992,
settings: {
slidesToShow: 2,
slidesToScroll: 1,
arrows: false,
dots: true
}
},
{
breakpoint: 768,
settings: {
slidesToShow: 2,
slidesToScroll: 1,
arrows: false,
dots: true
}
},
{
breakpoint: 580,
settings: {
arrows: false,
dots: true,
slidesToShow: 1,
slidesToScroll: 1
}
}
]
});
})(jQuery);

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,212 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Transform your business with cutting-edge AI solutions. Premium SaaS platform for startups and digital agencies.">
<title>NeuralSync - AI-Powered SaaS Solutions for Modern Businesses HTML Template</title>
<!-- Google Fonts -->
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap" rel="stylesheet">
<!-- Bootstrap 5 -->
<link rel="stylesheet" href="assets/css/bootstrap.min.css">
<!-- Bootstrap Icons -->
<link rel="stylesheet" href="assets/fonts/bootstrap-icons.min.css">
<!-- Font Awesome -->
<link rel="stylesheet" href="assets/fonts/font-awesome.min.css">
<link rel="stylesheet" href="assets/css/slick.min.css">
<link rel="stylesheet" href="assets/css/theme-spacing.min.css">
<!-- Template styles -->
<link rel="stylesheet" href="assets/css/style.css">
<link rel="stylesheet" href="assets/css/responsive.css">
</head>
<body>
<div class="page-wrapper">
<!-- START PRELOADER -->
<div class="preloader">
<div class="status">
<div class="loader">
<div class="loading-1"></div>
<div class="loading-2">Loading...</div>
</div>
</div>
</div>
<!-- END PRELOADER -->
<!-- BACK TO TOP -->
<div class="scroll-top">
<i class="bi bi-arrow-up" style="font-size: 1.5rem; color: white;"></i>
</div>
<!-- BACK TO TOP -->
<!-- Animated Background -->
<div class="animated-bg"></div>
<!-- Navigation -->
<nav class="navbar navbar-expand-lg fixed-top">
<div class="container">
<a class="navbar-brand" href="index.html"><i class="fa-light fa-sparkles mr-5"></i>NeuralSync</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 ms-auto align-items-center">
<li class="nav-item"><a class="nav-link" href="index.html">Home</a></li>
<li class="nav-item"><a class="nav-link" href="features.html">Features</a></li>
<li class="nav-item"><a class="nav-link" href="about.html">About</a></li>
<li class="nav-item"><a class="nav-link" href="portfolio.html">Portfolio</a></li>
<li class="nav-item"><a class="nav-link" href="pricing.html">Pricing</a></li>
<li class="nav-item"><a class="nav-link" href="contact.html">Contact</a></li>
<li class="nav-item ms-3">
<button class="btn-primary-gradient">Get Started</button>
</li>
</ul>
</div>
</div>
</nav>
<main>
<!-- START BREADCRUMB -->
<section class="breadcrumb-area position-relative black-bg breadcrumb-cover-bg breadcrumb-spacing breadcrumb-bg-attach);">
<div class="container">
<div class="row justify-content-center text-center">
<div class="col-xxl-12">
<div class="breadcrumb-content p-relative z-index-2">
<div class="breadcrumb-single-content mb-10">
<span><a href="index.html"><i class="fa-light fa-house fa-fade me-2"></i>HOME</a></span>
<span class="breadcrumb-sub-title">CONTACT</span>
</div>
<h3 class="breadcrumb-title split-content end">Contact Us</h3>
</div>
</div>
</div>
</div>
</section>
<!-- END BREADCRUMB -->
<!-- Contact Form -->
<section class="atf-section-padding" id="contact">
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-8 fade-in">
<form class="contact-form glass-card" onsubmit="submitContact(event)">
<div class="row g-3">
<div class="col-md-6">
<input type="text" placeholder="Your Name" required>
</div>
<div class="col-md-6">
<input type="email" placeholder="Your Email" required>
</div>
<div class="col-12">
<input type="text" placeholder="Subject">
</div>
<div class="col-12">
<textarea rows="6" placeholder="Your Message" required></textarea>
</div>
<div class="col-12">
<button type="submit" class="btn-primary-gradient w-100">Send Message</button>
</div>
</div>
</form>
</div>
</div>
</div>
</section>
</main>
<footer>
<!-- Footer -->
<div class="footer">
<div class="container">
<div class="row g-4">
<div class="col-lg-4 col-md-6 fadeInLeft">
<h3 class="navbar-brand mb-50"><i class="fa-light fa-sparkles mr-5"></i>NeuralSync</h3>
<p class="text-secondary mb-4">Empowering businesses with cutting-edge AI technology to automate, analyze, and accelerate growth in the digital age.</p>
<div class="social-links">
<a href="#"><i class="fab fa-x-twitter"></i></a>
<a href="#"><i class="bi bi-linkedin"></i></a>
<a href="#"><i class="bi bi-github"></i></a>
<a href="#"><i class="bi bi-instagram"></i></a>
</div>
</div>
<div class="col-lg-2 col-md-6 fadeInUp">
<h3>Product</h3>
<ul>
<li><a href="#features">Features</a></li>
<li><a href="#pricing">Pricing</a></li>
<li><a href="#">Security</a></li>
<li><a href="#">Integrations</a></li>
<li><a href="#">API Docs</a></li>
</ul>
</div>
<div class="col-lg-2 col-md-6 fadeInUp">
<h3>Company</h3>
<ul>
<li><a href="#about">About Us</a></li>
<li><a href="#">Careers</a></li>
<li><a href="#">Blog</a></li>
<li><a href="#">Press Kit</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</div>
<div class="col-lg-2 col-md-6 fadeInUp">
<h3>Resources</h3>
<ul>
<li><a href="#">Documentation</a></li>
<li><a href="#">Tutorials</a></li>
<li><a href="#">Community</a></li>
<li><a href="#">Support</a></li>
<li><a href="#">Status</a></li>
</ul>
</div>
<div class="col-lg-2 col-md-6 fadeInRight">
<h3>Legal</h3>
<ul>
<li><a href="#">Privacy Policy</a></li>
<li><a href="#">Terms of Service</a></li>
<li><a href="#">Cookie Policy</a></li>
<li><a href="#">GDPR</a></li>
</ul>
</div>
</div>
<hr style="border-color: rgba(255,255,255,0.1); margin: 3rem 0 2rem;">
<div class="row align-items-center">
<div class="col-md-6 text-center text-md-start mb-3 mb-md-0">
<p class="text-secondary mb-0">&copy; 2026 NeuralSync. All rights reserved.</p>
</div>
<div class="col-md-6 text-center text-md-end">
<p class="text-secondary mb-0">Made with <span style="color: #f093fb;">?</span> for innovators worldwide</p>
</div>
</div>
</div>
</div>
</footer>
</div>
<!-- END PRELOADER -->
<!-- jQuery, Bootstrap, GSAP -->
<script src="assets/js/jquery.min.js"></script>
<!-- Latest compiled and minified Bootstrap -->
<script src="assets/js/bootstrap.min.js"></script>
<script src="assets/js/plugin.min.js"></script>
<script src="assets/js/gsap.js"></script>
<!-- Template scripts -->
<script src="assets/js/main.js"></script>
</body>
</html>

View File

@@ -0,0 +1,277 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Transform your business with cutting-edge AI solutions. Premium SaaS platform for startups and digital agencies.">
<title>NeuralSync - AI-Powered SaaS Solutions for Modern Businesses HTML Template</title>
<!-- Google Fonts -->
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap" rel="stylesheet">
<!-- Bootstrap 5 -->
<link rel="stylesheet" href="assets/css/bootstrap.min.css">
<!-- Bootstrap Icons -->
<link rel="stylesheet" href="assets/fonts/bootstrap-icons.min.css">
<!-- Font Awesome -->
<link rel="stylesheet" href="assets/fonts/font-awesome.min.css">
<link rel="stylesheet" href="assets/css/slick.min.css">
<link rel="stylesheet" href="assets/css/theme-spacing.min.css">
<!-- Template styles -->
<link rel="stylesheet" href="assets/css/style.css">
<link rel="stylesheet" href="assets/css/responsive.css">
</head>
<body>
<div class="page-wrapper">
<!-- START PRELOADER -->
<div class="preloader">
<div class="status">
<div class="loader">
<div class="loading-1"></div>
<div class="loading-2">Loading...</div>
</div>
</div>
</div>
<!-- END PRELOADER -->
<!-- BACK TO TOP -->
<div class="scroll-top">
<i class="bi bi-arrow-up" style="font-size: 1.5rem; color: white;"></i>
</div>
<!-- BACK TO TOP -->
<!-- Animated Background -->
<div class="animated-bg"></div>
<!-- Navigation -->
<nav class="navbar navbar-expand-lg fixed-top">
<div class="container">
<a class="navbar-brand" href="index.html"><i class="fa-light fa-sparkles mr-5"></i>NeuralSync</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 ms-auto align-items-center">
<li class="nav-item"><a class="nav-link" href="index.html">Home</a></li>
<li class="nav-item"><a class="nav-link" href="features.html">Features</a></li>
<li class="nav-item"><a class="nav-link" href="about.html">About</a></li>
<li class="nav-item"><a class="nav-link" href="portfolio.html">Portfolio</a></li>
<li class="nav-item"><a class="nav-link" href="pricing.html">Pricing</a></li>
<li class="nav-item"><a class="nav-link" href="contact.html">Contact</a></li>
<li class="nav-item ms-3">
<button class="btn-primary-gradient">Get Started</button>
</li>
</ul>
</div>
</div>
</nav>
<main>
<!-- START BREADCRUMB -->
<section class="breadcrumb-area position-relative black-bg breadcrumb-cover-bg breadcrumb-spacing breadcrumb-bg-attach);">
<div class="container">
<div class="row justify-content-center text-center">
<div class="col-xxl-12">
<div class="breadcrumb-content p-relative z-index-2">
<div class="breadcrumb-single-content mb-10">
<span><a href="index.html"><i class="fa-light fa-house fa-fade me-2"></i>HOME</a></span>
<span class="breadcrumb-sub-title">SERVICE</span>
</div>
<h3 class="breadcrumb-title split-content end">Our Service</h3>
</div>
</div>
</div>
</div>
</section>
<!-- END BREADCRUMB -->
<!-- Logo Slider -->
<div class="logo-slider">
<div class="container">
<p class="text-center mb-50 split-content end">TRUSTED BY LEADING COMPANIES WORLDWIDE</p>
<div class="overflow-hidden">
<div class="logo-track">
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPjx0ZXh0IHg9IjEwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0iIzk0YTNiOCI+VGVjaENvcnA8L3RleHQ+PC9zdmc+" alt="Client Logo" class="company-logo">
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPjx0ZXh0IHg9IjEwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0iIzk0YTNiOCI+RGF0YUZsb3c8L3RleHQ+PC9zdmc+" alt="Client Logo" class="company-logo">
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPjx0ZXh0IHg9IjEwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0iIzk0YTNiOCI+QUlMYWJzPC90ZXh0Pjwvc3ZnPg==" alt="Client Logo" class="company-logo">
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPjx0ZXh0IHg9IjEwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0iIzk0YTNiOCI+SW5ub1RlY2g8L3RleHQ+PC9zdmc+" alt="Client Logo" class="company-logo">
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPjx0ZXh0IHg9IjEwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0iIzk0YTNiOCI+RnV0dXJlQUk8L3RleHQ+PC9zdmc+" alt="Client Logo" class="company-logo">
<!-- Duplicate for seamless loop -->
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPjx0ZXh0IHg9IjEwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0iIzk0YTNiOCI+VGVjaENvcnA8L3RleHQ+PC9zdmc+" alt="Client Logo" class="company-logo">
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPjx0ZXh0IHg9IjEwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0iIzk0YTNiOCI+RGF0YUZsb3c8L3RleHQ+PC9zdmc+" alt="Client Logo" class="company-logo">
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPjx0ZXh0IHg9IjEwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0iIzk0YTNiOCI+QUlMYWJzPC90ZXh0Pjwvc3ZnPg==" alt="Client Logo" class="company-logo">
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPjx0ZXh0IHg9IjEwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0iIzk0YTNiOCI+SW5ub1RlY2g8L3RleHQ+PC9zdmc+" alt="Client Logo" class="company-logo">
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPjx0ZXh0IHg9IjEwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0iIzk0YTNiOCI+RnV0dXJlQUk8L3RleHQ+PC9zdmc+" alt="Client Logo" class="company-logo">
</div>
</div>
</div>
</div>
<!-- Features Section -->
<section class="atf-section-padding" id="features">
<div class="container">
<div class="section-title mb-50 text-center">
<h2 class="title split-content start">Powerful Features for Modern Businesses</h2>
<p class="section-subtitle fade-in">Everything you need to scale your operations with cutting-edge AI technology</p>
</div>
<div class="row g-4 text-center">
<div class="col-md-6 col-lg-4 fadeInLeft">
<div class="glass-card feature-card">
<div class="feature-icon">
<i class="bi bi-cpu"></i>
</div>
<h3>AI Automation</h3>
<p>Automate repetitive tasks and workflows with intelligent machine learning algorithms that adapt to your business needs.</p>
</div>
</div>
<div class="col-md-6 col-lg-4 fadeInUp">
<div class="glass-card feature-card">
<div class="feature-icon">
<i class="bi bi-graph-up-arrow"></i>
</div>
<h3>Advanced Analytics</h3>
<p>Real-time insights and predictive analytics to make data-driven decisions and stay ahead of the competition.</p>
</div>
</div>
<div class="col-md-6 col-lg-4 fadeInRight">
<div class="glass-card feature-card">
<div class="feature-icon">
<i class="bi bi-shield-check"></i>
</div>
<h3>Enterprise Security</h3>
<p>Bank-level encryption and compliance with SOC 2, GDPR, and HIPAA standards to protect your data.</p>
</div>
</div>
<div class="col-md-6 col-lg-4 fadeInLeft">
<div class="glass-card feature-card">
<div class="feature-icon">
<i class="bi bi-lightning-charge"></i>
</div>
<h3>Lightning Fast</h3>
<p>Optimized infrastructure delivering sub-second response times and 99.9% uptime guarantee.</p>
</div>
</div>
<div class="col-md-6 col-lg-4 fadeInUp">
<div class="glass-card feature-card">
<div class="feature-icon">
<i class="bi bi-people"></i>
</div>
<h3>Team Collaboration</h3>
<p>Seamless collaboration tools with real-time sync, role-based access, and integrated communication.</p>
</div>
</div>
<div class="col-md-6 col-lg-4 fadeInRight">
<div class="glass-card feature-card">
<div class="feature-icon">
<i class="bi bi-phone"></i>
</div>
<h3>API Integration</h3>
<p>Connect with 1000+ apps and services through our robust RESTful API and webhook system.</p>
</div>
</div>
</div>
</div>
</section>
</main>
<footer>
<!-- Footer -->
<div class="footer">
<div class="container">
<div class="row g-4">
<div class="col-lg-4 col-md-6 fadeInLeft">
<h3 class="navbar-brand mb-50"><i class="fa-light fa-sparkles mr-5"></i>NeuralSync</h3>
<p class="text-secondary mb-4">Empowering businesses with cutting-edge AI technology to automate, analyze, and accelerate growth in the digital age.</p>
<div class="social-links">
<a href="#"><i class="fab fa-x-twitter"></i></a>
<a href="#"><i class="bi bi-linkedin"></i></a>
<a href="#"><i class="bi bi-github"></i></a>
<a href="#"><i class="bi bi-instagram"></i></a>
</div>
</div>
<div class="col-lg-2 col-md-6 fadeInUp">
<h3>Product</h3>
<ul>
<li><a href="#features">Features</a></li>
<li><a href="#pricing">Pricing</a></li>
<li><a href="#">Security</a></li>
<li><a href="#">Integrations</a></li>
<li><a href="#">API Docs</a></li>
</ul>
</div>
<div class="col-lg-2 col-md-6 fadeInUp">
<h3>Company</h3>
<ul>
<li><a href="#about">About Us</a></li>
<li><a href="#">Careers</a></li>
<li><a href="#">Blog</a></li>
<li><a href="#">Press Kit</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</div>
<div class="col-lg-2 col-md-6 fadeInUp">
<h3>Resources</h3>
<ul>
<li><a href="#">Documentation</a></li>
<li><a href="#">Tutorials</a></li>
<li><a href="#">Community</a></li>
<li><a href="#">Support</a></li>
<li><a href="#">Status</a></li>
</ul>
</div>
<div class="col-lg-2 col-md-6 fadeInRight">
<h3>Legal</h3>
<ul>
<li><a href="#">Privacy Policy</a></li>
<li><a href="#">Terms of Service</a></li>
<li><a href="#">Cookie Policy</a></li>
<li><a href="#">GDPR</a></li>
</ul>
</div>
</div>
<hr style="border-color: rgba(255,255,255,0.1); margin: 3rem 0 2rem;">
<div class="row align-items-center">
<div class="col-md-6 text-center text-md-start mb-3 mb-md-0">
<p class="text-secondary mb-0">&copy; 2026 NeuralSync. All rights reserved.</p>
</div>
<div class="col-md-6 text-center text-md-end">
<p class="text-secondary mb-0">Made with <span style="color: #f093fb;">?</span> for innovators worldwide</p>
</div>
</div>
</div>
</div>
</footer>
</div>
<!-- END PRELOADER -->
<!-- jQuery, Bootstrap, GSAP -->
<script src="assets/js/jquery.min.js"></script>
<!-- Latest compiled and minified Bootstrap -->
<script src="assets/js/bootstrap.min.js"></script>
<script src="assets/js/plugin.min.js"></script>
<script src="assets/js/gsap.js"></script>
<!-- Template scripts -->
<script src="assets/js/main.js"></script>
</body>
</html>

View File

@@ -0,0 +1,926 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Transform your business with cutting-edge AI solutions. Premium SaaS platform for startups and digital agencies.">
<title>NeuralSync - AI-Powered SaaS Solutions for Modern Businesses HTML Template</title>
<!-- Google Fonts -->
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap" rel="stylesheet">
<!-- Bootstrap 5 -->
<link rel="stylesheet" href="assets/css/bootstrap.min.css">
<!-- Bootstrap Icons -->
<link rel="stylesheet" href="assets/fonts/bootstrap-icons.min.css">
<!-- Font Awesome -->
<link rel="stylesheet" href="assets/fonts/font-awesome.min.css">
<link rel="stylesheet" href="assets/css/slick.min.css">
<link rel="stylesheet" href="assets/css/theme-spacing.min.css">
<!-- Template styles -->
<link rel="stylesheet" href="assets/css/style.css">
<link rel="stylesheet" href="assets/css/responsive.css">
</head>
<body>
<div class="page-wrapper">
<!-- START PRELOADER -->
<div class="preloader">
<div class="status">
<div class="loader">
<div class="loading-1"></div>
<div class="loading-2">Loading...</div>
</div>
</div>
</div>
<!-- END PRELOADER -->
<!-- BACK TO TOP -->
<div class="scroll-top">
<i class="bi bi-arrow-up" style="font-size: 1.5rem; color: white;"></i>
</div>
<!-- BACK TO TOP -->
<!-- Animated Background -->
<div class="animated-bg"></div>
<!-- Navigation -->
<nav class="navbar navbar-expand-lg fixed-top">
<div class="container">
<a class="navbar-brand" href="index.html"><i class="fa-light fa-sparkles mr-5"></i>NeuralSync</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 ms-auto align-items-center">
<li class="nav-item"><a class="nav-link" href="index.html">Home</a></li>
<li class="nav-item"><a class="nav-link" href="features.html">Features</a></li>
<li class="nav-item"><a class="nav-link" href="about.html">About</a></li>
<li class="nav-item"><a class="nav-link" href="portfolio.html">Portfolio</a></li>
<li class="nav-item"><a class="nav-link" href="pricing.html">Pricing</a></li>
<li class="nav-item"><a class="nav-link" href="contact.html">Contact</a></li>
<li class="nav-item ms-3">
<button class="btn-primary-gradient">Get Started</button>
</li>
</ul>
</div>
</div>
</nav>
<main>
<!-- Hero Section -->
<section class="hero" id="home">
<div class="container">
<div class="row align-items-center">
<div class="col-lg-6 fade-in">
<div class="hero-content">
<h1 class="title split-content start">Transform Your Business with AI Powered Solutions</h1>
<p>Unleash the power of artificial intelligence to automate, analyze, and accelerate your digital growth Built <br> for modern startups and thinking agencies.</p>
<div class="d-flex gap-3 mb-4">
<button class="btn-primary-gradient">Start Free Trial</button>
<button class="btn-outline-gradient">Watch Demo</button>
</div>
<div class="d-flex gap-4 align-items-center mt-4">
<div>
<div class="stars">★★★★★</div>
<small class="text-secondary">4.9/5 from 2,500+ reviews</small>
</div>
</div>
</div>
</div>
<div class="col-lg-6 fade-in">
<div class="hero-image">
<svg class="ai-illustration" viewBox="0 0 600 600" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="grad1" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#667eea;stop-opacity:1" />
<stop offset="100%" style="stop-color:#764ba2;stop-opacity:1" />
</linearGradient>
<linearGradient id="grad2" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#00f2ff;stop-opacity:1" />
<stop offset="100%" style="stop-color:#667eea;stop-opacity:1" />
</linearGradient>
</defs>
<!-- AI Brain/Network -->
<circle cx="300" cy="300" r="120" fill="url(#grad1)" opacity="0.2"/>
<circle cx="300" cy="300" r="90" fill="url(#grad1)" opacity="0.3"/>
<circle cx="300" cy="300" r="60" fill="url(#grad1)" opacity="0.5"/>
<!-- Neural Network Nodes -->
<circle cx="300" cy="200" r="15" fill="url(#grad2)">
<animate attributeName="r" values="15;20;15" dur="2s" repeatCount="indefinite"/>
</circle>
<circle cx="400" cy="250" r="12" fill="url(#grad2)">
<animate attributeName="r" values="12;17;12" dur="2.5s" repeatCount="indefinite"/>
</circle>
<circle cx="200" cy="250" r="12" fill="url(#grad2)">
<animate attributeName="r" values="12;17;12" dur="2.2s" repeatCount="indefinite"/>
</circle>
<circle cx="350" cy="350" r="10" fill="url(#grad2)">
<animate attributeName="r" values="10;15;10" dur="2.8s" repeatCount="indefinite"/>
</circle>
<circle cx="250" cy="350" r="10" fill="url(#grad2)">
<animate attributeName="r" values="10;15;10" dur="2.6s" repeatCount="indefinite"/>
</circle>
<circle cx="300" cy="400" r="15" fill="url(#grad2)">
<animate attributeName="r" values="15;20;15" dur="2.3s" repeatCount="indefinite"/>
</circle>
<!-- Connection Lines -->
<line x1="300" y1="200" x2="400" y2="250" stroke="url(#grad2)" stroke-width="2" opacity="0.5">
<animate attributeName="opacity" values="0.3;0.8;0.3" dur="2s" repeatCount="indefinite"/>
</line>
<line x1="300" y1="200" x2="200" y2="250" stroke="url(#grad2)" stroke-width="2" opacity="0.5">
<animate attributeName="opacity" values="0.3;0.8;0.3" dur="2.2s" repeatCount="indefinite"/>
</line>
<line x1="400" y1="250" x2="350" y2="350" stroke="url(#grad2)" stroke-width="2" opacity="0.5">
<animate attributeName="opacity" values="0.3;0.8;0.3" dur="2.5s" repeatCount="indefinite"/>
</line>
<line x1="200" y1="250" x2="250" y2="350" stroke="url(#grad2)" stroke-width="2" opacity="0.5">
<animate attributeName="opacity" values="0.3;0.8;0.3" dur="2.8s" repeatCount="indefinite"/>
</line>
<line x1="350" y1="350" x2="300" y2="400" stroke="url(#grad2)" stroke-width="2" opacity="0.5">
<animate attributeName="opacity" values="0.3;0.8;0.3" dur="2.3s" repeatCount="indefinite"/>
</line>
<line x1="250" y1="350" x2="300" y2="400" stroke="url(#grad2)" stroke-width="2" opacity="0.5">
<animate attributeName="opacity" values="0.3;0.8;0.3" dur="2.6s" repeatCount="indefinite"/>
</line>
<!-- Floating Particles -->
<circle cx="150" cy="150" r="5" fill="#00f2ff" opacity="0.6">
<animateMotion dur="10s" repeatCount="indefinite">
<mpath href="#orbit1"/>
</animateMotion>
</circle>
<circle cx="450" cy="150" r="4" fill="#667eea" opacity="0.6">
<animateMotion dur="12s" repeatCount="indefinite">
<mpath href="#orbit2"/>
</animateMotion>
</circle>
<path id="orbit1" d="M 150,150 Q 300,50 450,150 T 150,150" fill="none"/>
<path id="orbit2" d="M 450,150 Q 500,300 450,450 T 450,150" fill="none"/>
</svg>
</div>
</div>
</div>
</div>
</section>
<!-- Logo Slider -->
<div class="logo-slider">
<div class="container">
<p class="text-center mb-50 split-content end">TRUSTED BY LEADING COMPANIES WORLDWIDE</p>
<div class="overflow-hidden">
<div class="logo-track">
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPjx0ZXh0IHg9IjEwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0iIzk0YTNiOCI+VGVjaENvcnA8L3RleHQ+PC9zdmc+" alt="Client Logo" class="company-logo">
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPjx0ZXh0IHg9IjEwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0iIzk0YTNiOCI+RGF0YUZsb3c8L3RleHQ+PC9zdmc+" alt="Client Logo" class="company-logo">
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPjx0ZXh0IHg9IjEwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0iIzk0YTNiOCI+QUlMYWJzPC90ZXh0Pjwvc3ZnPg==" alt="Client Logo" class="company-logo">
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPjx0ZXh0IHg9IjEwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0iIzk0YTNiOCI+SW5ub1RlY2g8L3RleHQ+PC9zdmc+" alt="Client Logo" class="company-logo">
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPjx0ZXh0IHg9IjEwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0iIzk0YTNiOCI+RnV0dXJlQUk8L3RleHQ+PC9zdmc+" alt="Client Logo" class="company-logo">
<!-- Duplicate for seamless loop -->
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPjx0ZXh0IHg9IjEwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0iIzk0YTNiOCI+VGVjaENvcnA8L3RleHQ+PC9zdmc+" alt="Client Logo" class="company-logo">
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPjx0ZXh0IHg9IjEwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0iIzk0YTNiOCI+RGF0YUZsb3c8L3RleHQ+PC9zdmc+" alt="Client Logo" class="company-logo">
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPjx0ZXh0IHg9IjEwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0iIzk0YTNiOCI+QUlMYWJzPC90ZXh0Pjwvc3ZnPg==" alt="Client Logo" class="company-logo">
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPjx0ZXh0IHg9IjEwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0iIzk0YTNiOCI+SW5ub1RlY2g8L3RleHQ+PC9zdmc+" alt="Client Logo" class="company-logo">
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPjx0ZXh0IHg9IjEwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0iIzk0YTNiOCI+RnV0dXJlQUk8L3RleHQ+PC9zdmc+" alt="Client Logo" class="company-logo">
</div>
</div>
</div>
</div>
<!-- Features Section -->
<section class="atf-section-padding" id="features">
<div class="container">
<div class="section-title mb-50 text-center">
<h2 class="title split-content start">Powerful Features for Modern Businesses</h2>
<p class="section-subtitle fade-in">Everything you need to scale your operations with cutting-edge AI technology</p>
</div>
<div class="row g-4 text-center">
<div class="col-md-6 col-lg-4 fadeInLeft">
<div class="glass-card feature-card">
<div class="feature-icon">
<i class="bi bi-cpu"></i>
</div>
<h3>AI Automation</h3>
<p>Automate repetitive tasks and workflows with intelligent machine learning algorithms that adapt to your business needs.</p>
</div>
</div>
<div class="col-md-6 col-lg-4 fadeInUp">
<div class="glass-card feature-card">
<div class="feature-icon">
<i class="bi bi-graph-up-arrow"></i>
</div>
<h3>Advanced Analytics</h3>
<p>Real-time insights and predictive analytics to make data-driven decisions and stay ahead of the competition.</p>
</div>
</div>
<div class="col-md-6 col-lg-4 fadeInRight">
<div class="glass-card feature-card">
<div class="feature-icon">
<i class="bi bi-shield-check"></i>
</div>
<h3>Enterprise Security</h3>
<p>Bank-level encryption and compliance with SOC 2, GDPR, and HIPAA standards to protect your data.</p>
</div>
</div>
<div class="col-md-6 col-lg-4 fadeInLeft">
<div class="glass-card feature-card">
<div class="feature-icon">
<i class="bi bi-lightning-charge"></i>
</div>
<h3>Lightning Fast</h3>
<p>Optimized infrastructure delivering sub-second response times and 99.9% uptime guarantee.</p>
</div>
</div>
<div class="col-md-6 col-lg-4 fadeInUp">
<div class="glass-card feature-card">
<div class="feature-icon">
<i class="bi bi-people"></i>
</div>
<h3>Team Collaboration</h3>
<p>Seamless collaboration tools with real-time sync, role-based access, and integrated communication.</p>
</div>
</div>
<div class="col-md-6 col-lg-4 fadeInRight">
<div class="glass-card feature-card">
<div class="feature-icon">
<i class="bi bi-phone"></i>
</div>
<h3>API Integration</h3>
<p>Connect with 1000+ apps and services through our robust RESTful API and webhook system.</p>
</div>
</div>
</div>
</div>
</section>
<!-- Stats Section -->
<div>
<div class="container">
<div class="stats-section">
<div class="row">
<div class="col-md-3 col-6 mb-4 mb-md-0 fadeInLeft">
<div class="stat-item">
<div class="stat-number"><span class="counter-value">10</span>K+</div>
<div class="stat-label">Active Users</div>
</div>
</div>
<div class="col-md-3 col-6 mb-4 mb-md-0 fadeInUp">
<div class="stat-item">
<div class="stat-number"><span class="counter-value">99</span>.9%</div>
<div class="stat-label">Uptime SLA</div>
</div>
</div>
<div class="col-md-3 col-6 fadeInUp">
<div class="stat-item">
<div class="stat-number"><span class="counter-value">50</span>M+</div>
<div class="stat-label">API Requests</div>
</div>
</div>
<div class="col-md-3 col-6 fadeInRight">
<div class="stat-item">
<div class="stat-number"><span class="counter-value">24</span>/7</div>
<div class="stat-label">Support</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- About / Why Choose Us -->
<section class="atf-section-padding" id="about">
<div class="container">
<div class="row align-items-center">
<div class="col-lg-6">
<div class="section-title mb-30 text-start">
<h2 class="title text-start mb-4 split-content up">Why Choose NeuralSync?</h2>
<p class="text-secondary" style="font-size: 1.1rem;">We're not just another SaaS platform. We're your innovation partner, combining cutting-edge AI technology with intuitive design to deliver exceptional results.</p>
</div>
<div class="about-content">
<div class="mb-4">
<h3 class="mb-3"><i class="fa-light fa-badge-check mr-5 text-info"></i> Innovation First</h3>
<p class="text-secondary">Stay ahead with bleeding-edge AI technology that evolves with your needs.</p>
</div>
<div class="mb-4">
<h3 class="mb-3"><i class="fa-light fa-badge-check mr-5 text-info"></i> Scalable Architecture</h3>
<p class="text-secondary">From startup to enterprise - our infrastructure grows seamlessly with your business.</p>
</div>
<div class="mb-4">
<h3 class="mb-3"><i class="fa-light fa-badge-check mr-5 text-info"></i> World-Class Support</h3>
<p class="text-secondary">24/7 expert support team ready to help you succeed at every step.</p>
</div>
</div>
<button class="btn-primary-gradient mt-3">DESCOVER MORE</button>
</div>
<div class="col-lg-6 zoomIn mt-lg-40">
<div class="glass-card p-4">
<svg viewBox="0 0 400 300" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="chartGrad" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" style="stop-color:#667eea;stop-opacity:0.8" />
<stop offset="100%" style="stop-color:#667eea;stop-opacity:0.1" />
</linearGradient>
</defs>
<path d="M 20 250 L 80 200 L 140 180 L 200 120 L 260 100 L 320 50 L 380 30"
stroke="#00f2ff" stroke-width="3" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M 20 250 L 80 200 L 140 180 L 200 120 L 260 100 L 320 50 L 380 30 L 380 300 L 20 300 Z"
fill="url(#chartGrad)"/>
<circle cx="80" cy="200" r="6" fill="#00f2ff">
<animate attributeName="r" values="6;10;6" dur="2s" repeatCount="indefinite"/>
</circle>
<circle cx="200" cy="120" r="6" fill="#00f2ff">
<animate attributeName="r" values="6;10;6" dur="2.5s" repeatCount="indefinite"/>
</circle>
<circle cx="320" cy="50" r="6" fill="#00f2ff">
<animate attributeName="r" values="6;10;6" dur="3s" repeatCount="indefinite"/>
</circle>
</svg>
</div>
</div>
</div>
</div>
</section>
<!-- Product Showcase -->
<section class="atf-section-padding pt-0">
<div class="container">
<div class="section-title mb-50 text-center">
<h2 class="title split-content start">Experience the Platform</h2>
<p class="section-subtitle fade-in">
A beautiful, intuitive dashboard designed for power users and beginners alike
</p>
</div>
<div class="dashboard-mockup spread zoom-out">
<svg viewBox="0 0 1200 700" xmlns="http://www.w3.org/2000/svg">
<!-- Dashboard Background -->
<rect width="1200" height="700" fill="#1e293b" rx="20"/>
<!-- Header -->
<rect width="1200" height="60" fill="#0f172a"/>
<text x="30" y="38" font-family="Inter, sans-serif" font-size="24" font-weight="bold" fill="#667eea">NeuralSync</text>
<!-- Header Icons -->
<foreignObject x="1050" y="10" width="140" height="40">
<div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;justify-content:flex-end;gap:10px;align-items:center;">
<i class="bi bi-bell-fill" style="color:#667eea;font-size:20px;"></i>
<i class="bi bi-gear-fill" style="color:#667eea;font-size:20px;"></i>
<i class="bi bi-person-circle" style="color:#667eea;font-size:20px;"></i>
</div>
</foreignObject>
<!-- Sidebar -->
<rect x="0" y="60" width="240" height="640" fill="#0f172a"/>
<rect x="20" y="100" width="200" height="40" rx="10" fill="#667eea" opacity="0.2"/>
<rect x="20" y="160" width="200" height="40" rx="10" fill="#334155"/>
<rect x="20" y="220" width="200" height="40" rx="10" fill="#334155"/>
<foreignObject x="30" y="105" width="180" height="40">
<div xmlns="http://www.w3.org/1999/xhtml" style="color:white;font-weight:600;font-family:Inter,sans-serif;">
<i class="bi bi-speedometer2 mr-5"></i> Dashboard
</div>
</foreignObject>
<foreignObject x="30" y="165" width="180" height="40">
<div xmlns="http://www.w3.org/1999/xhtml" style="color:white;font-weight:600;font-family:Inter,sans-serif;">
<i class="bi bi-people-fill mr-5"></i> Users
</div>
</foreignObject>
<foreignObject x="30" y="225" width="180" height="40">
<div xmlns="http://www.w3.org/1999/xhtml" style="color:white;font-weight:600;font-family:Inter,sans-serif;">
<i class="bi bi-bar-chart-fill mr-5"></i> Analytics
</div>
</foreignObject>
<!-- Main Content Area -->
<rect x="260" y="80" width="920" height="600" fill="#1e293b" rx="15"/>
<!-- Cards -->
<rect x="280" y="100" width="280" height="180" rx="15" fill="#334155"/>
<foreignObject x="300" y="120" width="240" height="40">
<div xmlns="http://www.w3.org/1999/xhtml" style="color:white;font-weight:600;font-family:Inter,sans-serif;">
<i class="bi bi-graph-up mr-5"></i> Sales Overview
</div>
</foreignObject>
<rect x="580" y="100" width="280" height="180" rx="15" fill="#334155"/>
<foreignObject x="600" y="120" width="240" height="40">
<div xmlns="http://www.w3.org/1999/xhtml" style="color:white;font-weight:600;font-family:Inter,sans-serif;">
<i class="bi bi-people mr-5"></i> Active Users
</div>
</foreignObject>
<rect x="880" y="100" width="280" height="180" rx="15" fill="#334155"/>
<foreignObject x="900" y="120" width="240" height="40">
<div xmlns="http://www.w3.org/1999/xhtml" style="color:white;font-weight:600;font-family:Inter,sans-serif;">
<i class="bi bi-wallet-fill mr-5"></i> Revenue
</div>
</foreignObject>
<!-- Chart Area -->
<rect x="280" y="300" width="880" height="360" rx="15" fill="#334155"/>
<path d="M 320 600 L 380 550 L 440 520 L 500 480 L 560 450 L 620 420 L 680 380 L 740 360 L 800 340 L 860 320 L 920 300 L 925 305 L 930 310 L 1100 315"
stroke="#667eea" stroke-width="3" fill="none" stroke-linecap="round"/>
<!-- Glowing Elements -->
<circle cx="420" cy="200" r="30" fill="#667eea" opacity="0.6">
<animate attributeName="opacity" values="0.3;0.8;0.3" dur="2s" repeatCount="indefinite"/>
</circle>
<circle cx="720" cy="200" r="30" fill="#00f2ff" opacity="0.6">
<animate attributeName="opacity" values="0.3;0.8;0.3" dur="2.5s" repeatCount="indefinite"/>
</circle>
<circle cx="1020" cy="200" r="30" fill="#764ba2" opacity="0.6">
<animate attributeName="opacity" values="0.3;0.8;0.3" dur="3s" repeatCount="indefinite"/>
</circle>
</svg>
</div>
</div>
</section>
<!-- Portfolio / Case Studies -->
<section class="atf-section-padding pt-0" id="portfolio">
<div class="container">
<div class="section-title mb-50 text-center">
<h2 class="title split-content start">Success Stories</h2>
<p class="section-subtitle fade-in">Real results from real companies transforming their businesses with NeuralSync</p>
</div>
<div class="row g-4">
<div class="col-md-6 fade-in">
<div class="glass-card portfolio-item">
<svg viewBox="0 0 400 350" xmlns="http://www.w3.org/2000/svg" class="portfolio-image">
<rect width="400" height="350" fill="#667eea"/>
<circle cx="200" cy="175" r="80" fill="rgba(255,255,255,0.2)"/>
<path d="M 150 175 L 190 215 L 270 135" stroke="white" stroke-width="8" fill="none" stroke-linecap="round"/>
</svg>
<div class="portfolio-overlay">
<div class="portfolio-title">TechStartup Inc.</div>
<div class="portfolio-category">AI Automation • 300% Growth</div>
<p class="mt-3">Automated customer support system reduced response time by 80%</p>
</div>
</div>
</div>
<div class="col-md-6 fade-in">
<div class="glass-card portfolio-item">
<svg viewBox="0 0 400 350" xmlns="http://www.w3.org/2000/svg" class="portfolio-image">
<rect width="400" height="350" fill="#764ba2"/>
<rect x="100" y="100" width="80" height="150" rx="10" fill="rgba(255,255,255,0.2)"/>
<rect x="200" y="80" width="80" height="170" rx="10" fill="rgba(255,255,255,0.3)"/>
<rect x="300" y="60" width="80" height="190" rx="10" fill="rgba(255,255,255,0.2)"/>
</svg>
<div class="portfolio-overlay">
<div class="portfolio-title">DataFlow Solutions</div>
<div class="portfolio-category">Analytics Platform • 500K Users</div>
<p class="mt-3">Built scalable analytics platform processing 10TB daily</p>
</div>
</div>
</div>
<div class="col-md-6 fade-in">
<div class="glass-card portfolio-item">
<svg viewBox="0 0 400 350" xmlns="http://www.w3.org/2000/svg" class="portfolio-image">
<rect width="400" height="350" fill="#00f2ff"/>
<circle cx="200" cy="175" r="100" fill="none" stroke="rgba(255,255,255,0.3)" stroke-width="3"/>
<circle cx="200" cy="175" r="70" fill="none" stroke="rgba(255,255,255,0.3)" stroke-width="3"/>
<circle cx="200" cy="175" r="40" fill="rgba(255,255,255,0.4)"/>
</svg>
<div class="portfolio-overlay">
<div class="portfolio-title">Marketing Pro Agency</div>
<div class="portfolio-category">Automation Tools • $2M Revenue</div>
<p class="mt-3">Marketing automation increased client retention by 65%</p>
</div>
</div>
</div>
<div class="col-md-6 fade-in">
<div class="glass-card portfolio-item">
<svg viewBox="0 0 400 350" xmlns="http://www.w3.org/2000/svg" class="portfolio-image">
<rect width="400" height="350" fill="#f093fb"/>
<path d="M 50 300 L 100 250 L 150 270 L 200 200 L 250 220 L 300 150 L 350 100"
stroke="white" stroke-width="5" fill="none" stroke-linecap="round"/>
<circle cx="200" cy="200" r="8" fill="white"/>
<circle cx="300" cy="150" r="8" fill="white"/>
<circle cx="350" cy="100" r="8" fill="white"/>
</svg>
<div class="portfolio-overlay">
<div class="portfolio-title">FinTech Innovations</div>
<div class="portfolio-category">ML Predictions • 95% Accuracy</div>
<p class="mt-3">AI-powered fraud detection saved $5M in first quarter</p>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- Pricing Section -->
<section class="atf-section-padding pt-0" id="pricing">
<div class="container">
<div class="section-title mb-50 text-center">
<h2 class="title split-content start">Simple, Transparent Pricing</h2>
<p class="section-subtitle fade-in">Choose the perfect plan for your business. All plans include 14-day free trial.</p>
</div>
<div class="row g-4 justify-content-center mt-40">
<div class="col-lg-4 col-md-6 fadeInLeft">
<div class="pricing-card">
<div class="glass-card">
<h3 class="mb-3">Starter</h3>
<p class="text-secondary mb-4">Perfect for small teams and startups</p>
<div class="price">$49<span style="font-size: 1.5rem; color: var(--text-secondary);">/mo</span></div>
<ul class="pricing-features">
<li><i class="bi bi-check-circle-fill"></i> Up to 5 team members</li>
<li><i class="bi bi-check-circle-fill"></i> 10,000 API requests/month</li>
<li><i class="bi bi-check-circle-fill"></i> Basic analytics</li>
<li><i class="bi bi-check-circle-fill"></i> Email support</li>
<li><i class="bi bi-check-circle-fill"></i> 10GB storage</li>
</ul>
<button class="btn-outline-gradient w-100">Get Started</button>
</div>
</div>
</div>
<div class="col-lg-4 col-md-6 fadeInUp">
<div class="pricing-card featured">
<div class="pricing-badge">MOST POPULAR</div>
<div class="glass-card">
<h3 class="mb-3">Professional</h3>
<p class="text-secondary mb-4">For growing businesses and agencies</p>
<div class="price">$149<span style="font-size: 1.5rem; color: var(--text-secondary);">/mo</span></div>
<ul class="pricing-features">
<li><i class="bi bi-check-circle-fill"></i> Up to 25 team members</li>
<li><i class="bi bi-check-circle-fill"></i> 100,000 API requests/month</li>
<li><i class="bi bi-check-circle-fill"></i> Advanced analytics & AI</li>
<li><i class="bi bi-check-circle-fill"></i> Priority support 24/7</li>
<li><i class="bi bi-check-circle-fill"></i> 100GB storage</li>
<li><i class="bi bi-check-circle-fill"></i> Custom integrations</li>
<li><i class="bi bi-check-circle-fill"></i> White-label options</li>
</ul>
<button class="btn-primary-gradient w-100">Get Started</button>
</div>
</div>
</div>
<div class="col-lg-4 col-md-6 fadeInRight">
<div class="pricing-card">
<div class="glass-card">
<h3 class="mb-3">Enterprise</h3>
<p class="text-secondary mb-4">For large organizations with custom needs</p>
<div class="price">Custom</div>
<ul class="pricing-features">
<li><i class="bi bi-check-circle-fill"></i> Unlimited team members</li>
<li><i class="bi bi-check-circle-fill"></i> Unlimited API requests</li>
<li><i class="bi bi-check-circle-fill"></i> Custom AI models</li>
<li><i class="bi bi-check-circle-fill"></i> Dedicated success manager</li>
<li><i class="bi bi-check-circle-fill"></i> Unlimited storage</li>
<li><i class="bi bi-check-circle-fill"></i> On-premise deployment</li>
<li><i class="bi bi-check-circle-fill"></i> SLA guarantee</li>
<li><i class="bi bi-check-circle-fill"></i> Custom contracts</li>
</ul>
<button class="btn-outline-gradient w-100">Contact Sales</button>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- Testimonials -->
<section class="atf-section-padding pt-0">
<div class="container">
<div class="row align-items-center justify-content-start">
<div class="section-title style1 mb-50 text-start">
<h2 class="title split-content end ">Loved by Thousands of Companies</h2>
<p class="section-subtitle fade-in ">Don't just take our word for it - hear from our satisfied customers</p>
</div>
</div>
<div class="row g-4 atf_client-slider slick-arrow-2">
<div class="col-lg-4 col-md-6 fade-in">
<div class="glass-card testimonial-card">
<div class="stars">★★★★★</div>
<p class="testimonial-text">"NeuralSync transformed how we handle customer data. The AI automation saved us 20 hours per week and increased our conversion rate by 45%."</p>
<svg width="80" height="80" class="testimonial-image">
<circle cx="40" cy="40" r="37" fill="#667eea"/>
<text x="40" y="50" text-anchor="middle" font-family="Inter" font-size="32" font-weight="bold" fill="white">SK</text>
</svg>
<div class="testimonial-author">Sarah Kim</div>
<div class="testimonial-role">CEO, TechFlow Solutions</div>
</div>
</div>
<div class="col-lg-4 col-md-6 fade-in">
<div class="glass-card testimonial-card">
<div class="stars">★★★★★</div>
<p class="testimonial-text">"The best investment we've made. The platform is incredibly intuitive and the support team is outstanding. Highly recommend to any growing startup."</p>
<svg width="80" height="80" class="testimonial-image">
<circle cx="40" cy="40" r="37" fill="#764ba2"/>
<text x="40" y="50" text-anchor="middle" font-family="Inter" font-size="32" font-weight="bold" fill="white">MJ</text>
</svg>
<div class="testimonial-author">Michael Johnson</div>
<div class="testimonial-role">CTO, DataVerse Inc</div>
</div>
</div>
<div class="col-lg-4 col-md-6 fade-in">
<div class="glass-card testimonial-card">
<div class="stars">★★★★★</div>
<p class="testimonial-text">"Seamless integration with our existing tools. The analytics dashboard gives us insights we never had before. Game changer for our agency."</p>
<svg width="80" height="80" class="testimonial-image">
<circle cx="40" cy="40" r="37" fill="#00f2ff"/>
<text x="40" y="50" text-anchor="middle" font-family="Inter" font-size="32" font-weight="bold" fill="white">EP</text>
</svg>
<div class="testimonial-author">Emily Parker</div>
<div class="testimonial-role">Director, Creative Digital Agency</div>
</div>
</div>
<div class="col-lg-4 col-md-6 fade-in">
<div class="glass-card testimonial-card">
<div class="stars">★★★★★</div>
<p class="testimonial-text">"NeuralSync transformed how we handle customer data. The AI automation saved us 20 hours per week and increased our conversion rate by 45%."</p>
<svg width="80" height="80" class="testimonial-image">
<circle cx="40" cy="40" r="37" fill="#667eea"/>
<text x="40" y="50" text-anchor="middle" font-family="Inter" font-size="32" font-weight="bold" fill="white">SK</text>
</svg>
<div class="testimonial-author">Sarah Kim</div>
<div class="testimonial-role">CEO, TechFlow Solutions</div>
</div>
</div>
<div class="col-lg-4 col-md-6 fade-in">
<div class="glass-card testimonial-card">
<div class="stars">★★★★★</div>
<p class="testimonial-text">"The best investment we've made. The platform is incredibly intuitive and the support team is outstanding. Highly recommend to any growing startup."</p>
<svg width="80" height="80" class="testimonial-image">
<circle cx="40" cy="40" r="37" fill="#764ba2"/>
<text x="40" y="50" text-anchor="middle" font-family="Inter" font-size="32" font-weight="bold" fill="white">MJ</text>
</svg>
<div class="testimonial-author">Michael Johnson</div>
<div class="testimonial-role">CTO, DataVerse Inc</div>
</div>
</div>
<div class="col-lg-4 col-md-6 fade-in">
<div class="glass-card testimonial-card">
<div class="stars">★★★★★</div>
<p class="testimonial-text">"Seamless integration with our existing tools. The analytics dashboard gives us insights we never had before. Game changer for our agency."</p>
<svg width="80" height="80" class="testimonial-image">
<circle cx="40" cy="40" r="37" fill="#00f2ff"/>
<text x="40" y="50" text-anchor="middle" font-family="Inter" font-size="32" font-weight="bold" fill="white">EP</text>
</svg>
<div class="testimonial-author">Emily Parker</div>
<div class="testimonial-role">Director, Creative Digital Agency</div>
</div>
</div>
</div>
</div>
</section>
<!-- CTA Banner -->
<section>
<div class="container">
<div class="cta-banner fade-in">
<h2>Ready to Transform Your Business?</h2>
<p>Join 10,000+ companies already using NeuralSync to automate, analyze, and accelerate their growth.</p>
<div class="d-flex gap-3 justify-content-center flex-wrap">
<button class="btn-primary-gradient" style="background: white; color: #667eea;">Start Free Trial</button>
<button class="btn-outline-gradient" style="border-color: white; color: white;">Schedule Demo</button>
</div>
</div>
</div>
</section>
<!-- FAQ Section -->
<section class="atf-section-padding">
<div class="container">
<div class="section-title mb-50 text-center">
<h2 class="title split-content end">Frequently Asked Questions</h2>
<p class="section-subtitle fade-in">Everything you need to know about NeuralSync</p>
</div>
<div class="row justify-content-center">
<div class="col-lg-8 fade-in">
<div class="faq-item">
<div class="faq-question">
<span>What is NeuralSync and how does it work?</span>
<i class="bi bi-chevron-down"></i>
</div>
<div class="faq-answer">
NeuralSync is an AI-powered SaaS platform that helps businesses automate workflows, analyze data, and scale operations. Our machine learning algorithms adapt to your specific needs and continuously improve performance over time.
</div>
</div>
<div class="faq-item">
<div class="faq-question">
<span>Can I try NeuralSync before committing?</span>
<i class="bi bi-chevron-down"></i>
</div>
<div class="faq-answer">
Absolutely! All plans include a 14-day free trial with full access to features. No credit card required to start. You can cancel anytime during the trial period.
</div>
</div>
<div class="faq-item">
<div class="faq-question">
<span>How secure is my data?</span>
<i class="bi bi-chevron-down"></i>
</div>
<div class="faq-answer">
Security is our top priority. We use bank-level 256-bit encryption, are SOC 2 Type II certified, and comply with GDPR, HIPAA, and other international standards. Your data is stored in encrypted databases with regular backups.
</div>
</div>
<div class="faq-item">
<div class="faq-question">
<span>What kind of support do you provide?</span>
<i class="bi bi-chevron-down"></i>
</div>
<div class="faq-answer">
We offer email support for Starter plans, 24/7 priority support for Professional plans, and dedicated success managers for Enterprise clients. We also have extensive documentation, video tutorials, and community forums.
</div>
</div>
<div class="faq-item">
<div class="faq-question">
<span>Can I change my plan later?</span>
<i class="bi bi-chevron-down"></i>
</div>
<div class="faq-answer">
Yes! You can upgrade or downgrade your plan at any time. When upgrading, you'll get immediate access to new features. When downgrading, changes take effect at the start of your next billing cycle.
</div>
</div>
<div class="faq-item">
<div class="faq-question">
<span>Do you offer refunds?</span>
<i class="bi bi-chevron-down"></i>
</div>
<div class="faq-answer">
Yes, we offer a 30-day money-back guarantee. If you're not satisfied with NeuralSync within the first 30 days, we'll provide a full refund, no questions asked.
</div>
</div>
</div>
</div>
</div>
</section>
<!-- Newsletter Section -->
<section>
<div class="container">
<div class="newsletter-section fade-in">
<h2>Stay Updated</h2>
<p>Get the latest AI insights, product updates, and exclusive offers delivered to your inbox.</p>
<form class="d-flex justify-content-center flex-wrap gap-3" onsubmit="subscribeNewsletter(event)">
<input type="email" class="newsletter-input" placeholder="Enter your email address" required>
<button type="submit" class="btn-primary-gradient" style="background: white; color: #667eea;">Subscribe</button>
</form>
<p class="description">We respect your privacy. Unsubscribe at any time.</p>
</div>
</div>
</section>
<!-- Contact Form -->
<section class="atf-section-padding" id="contact">
<div class="container">
<div class="section-title mb-50 text-center">
<h2 class="title split-content end">Get In Touch</h2>
<p class="section-subtitle fade-in">Have questions? We'd love to hear from you Send us a message.</p>
</div>
<div class="row justify-content-center">
<div class="col-lg-8 fade-in">
<form class="contact-form glass-card" onsubmit="submitContact(event)">
<div class="row g-3">
<div class="col-md-6">
<input type="text" placeholder="Your Name" required>
</div>
<div class="col-md-6">
<input type="email" placeholder="Your Email" required>
</div>
<div class="col-12">
<input type="text" placeholder="Subject">
</div>
<div class="col-12">
<textarea rows="6" placeholder="Your Message" required></textarea>
</div>
<div class="col-12">
<button type="submit" class="btn-primary-gradient w-100">Send Message</button>
</div>
</div>
</form>
</div>
</div>
</div>
</section>
</main>
<footer>
<!-- Footer -->
<div class="footer">
<div class="container">
<div class="row g-4">
<div class="col-lg-4 col-md-6 fadeInLeft">
<h3 class="navbar-brand mb-50"><i class="fa-light fa-sparkles mr-5"></i>NeuralSync</h3>
<p class="text-secondary mb-4">Empowering businesses with cutting-edge AI technology to automate, analyze, and accelerate growth in the digital age.</p>
<div class="social-links">
<a href="#"><i class="fab fa-x-twitter"></i></a>
<a href="#"><i class="bi bi-linkedin"></i></a>
<a href="#"><i class="bi bi-github"></i></a>
<a href="#"><i class="bi bi-instagram"></i></a>
</div>
</div>
<div class="col-lg-2 col-md-6 fadeInUp">
<h3>Product</h3>
<ul>
<li><a href="#features">Features</a></li>
<li><a href="#pricing">Pricing</a></li>
<li><a href="#">Security</a></li>
<li><a href="#">Integrations</a></li>
<li><a href="#">API Docs</a></li>
</ul>
</div>
<div class="col-lg-2 col-md-6 fadeInUp">
<h3>Company</h3>
<ul>
<li><a href="#about">About Us</a></li>
<li><a href="#">Careers</a></li>
<li><a href="#">Blog</a></li>
<li><a href="#">Press Kit</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</div>
<div class="col-lg-2 col-md-6 fadeInUp">
<h3>Resources</h3>
<ul>
<li><a href="#">Documentation</a></li>
<li><a href="#">Tutorials</a></li>
<li><a href="#">Community</a></li>
<li><a href="#">Support</a></li>
<li><a href="#">Status</a></li>
</ul>
</div>
<div class="col-lg-2 col-md-6 fadeInRight">
<h3>Legal</h3>
<ul>
<li><a href="#">Privacy Policy</a></li>
<li><a href="#">Terms of Service</a></li>
<li><a href="#">Cookie Policy</a></li>
<li><a href="#">GDPR</a></li>
</ul>
</div>
</div>
<hr style="border-color: rgba(255,255,255,0.1); margin: 3rem 0 2rem;">
<div class="row align-items-center">
<div class="col-md-6 text-center text-md-start mb-3 mb-md-0">
<p class="text-secondary mb-0">&copy; 2026 NeuralSync. All rights reserved.</p>
</div>
<div class="col-md-6 text-center text-md-end">
<p class="text-secondary mb-0">Made with <span style="color: #f093fb;"></span> for innovators worldwide</p>
</div>
</div>
</div>
</div>
</footer>
</div>
<!-- END PRELOADER -->
<!-- jQuery, Bootstrap, GSAP -->
<script src="assets/js/jquery.min.js"></script>
<!-- Latest compiled and minified Bootstrap -->
<script src="assets/js/bootstrap.min.js"></script>
<script src="assets/js/plugin.min.js"></script>
<script src="assets/js/gsap.js"></script>
<!-- Template scripts -->
<script src="assets/js/main.js"></script>
</body>
</html>

View File

@@ -0,0 +1,259 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Transform your business with cutting-edge AI solutions. Premium SaaS platform for startups and digital agencies.">
<title>NeuralSync - AI-Powered SaaS Solutions for Modern Businesses HTML Template</title>
<!-- Google Fonts -->
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap" rel="stylesheet">
<!-- Bootstrap 5 -->
<link rel="stylesheet" href="assets/css/bootstrap.min.css">
<!-- Bootstrap Icons -->
<link rel="stylesheet" href="assets/fonts/bootstrap-icons.min.css">
<!-- Font Awesome -->
<link rel="stylesheet" href="assets/fonts/font-awesome.min.css">
<link rel="stylesheet" href="assets/css/slick.min.css">
<link rel="stylesheet" href="assets/css/theme-spacing.min.css">
<!-- Template styles -->
<link rel="stylesheet" href="assets/css/style.css">
<link rel="stylesheet" href="assets/css/responsive.css">
</head>
<body>
<div class="page-wrapper">
<!-- START PRELOADER -->
<div class="preloader">
<div class="status">
<div class="loader">
<div class="loading-1"></div>
<div class="loading-2">Loading...</div>
</div>
</div>
</div>
<!-- END PRELOADER -->
<!-- BACK TO TOP -->
<div class="scroll-top">
<i class="bi bi-arrow-up" style="font-size: 1.5rem; color: white;"></i>
</div>
<!-- BACK TO TOP -->
<!-- Animated Background -->
<div class="animated-bg"></div>
<!-- Navigation -->
<nav class="navbar navbar-expand-lg fixed-top">
<div class="container">
<a class="navbar-brand" href="index.html"><i class="fa-light fa-sparkles mr-5"></i>NeuralSync</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 ms-auto align-items-center">
<li class="nav-item"><a class="nav-link" href="index.html">Home</a></li>
<li class="nav-item"><a class="nav-link" href="features.html">Features</a></li>
<li class="nav-item"><a class="nav-link" href="about.html">About</a></li>
<li class="nav-item"><a class="nav-link" href="portfolio.html">Portfolio</a></li>
<li class="nav-item"><a class="nav-link" href="pricing.html">Pricing</a></li>
<li class="nav-item"><a class="nav-link" href="contact.html">Contact</a></li>
<li class="nav-item ms-3">
<button class="btn-primary-gradient">Get Started</button>
</li>
</ul>
</div>
</div>
</nav>
<main>
<!-- START BREADCRUMB -->
<section class="breadcrumb-area position-relative black-bg breadcrumb-cover-bg breadcrumb-spacing breadcrumb-bg-attach);">
<div class="container">
<div class="row justify-content-center text-center">
<div class="col-xxl-12">
<div class="breadcrumb-content p-relative z-index-2">
<div class="breadcrumb-single-content mb-10">
<span><a href="index.html"><i class="fa-light fa-house fa-fade me-2"></i>HOME</a></span>
<span class="breadcrumb-sub-title">PORTFOLIO</span>
</div>
<h3 class="breadcrumb-title split-content end">Our Portfolio</h3>
</div>
</div>
</div>
</div>
</section>
<!-- END BREADCRUMB -->
<!-- Portfolio / Case Studies -->
<section class="atf-section-padding" id="portfolio">
<div class="container">
<div class="section-title mb-50 text-center">
<h2 class="title split-content start">Success Stories</h2>
<p class="section-subtitle fade-in">Real results from real companies transforming their businesses with NeuralSync</p>
</div>
<div class="row g-4">
<div class="col-md-6 fade-in">
<div class="glass-card portfolio-item">
<svg viewBox="0 0 400 350" xmlns="http://www.w3.org/2000/svg" class="portfolio-image">
<rect width="400" height="350" fill="#667eea"/>
<circle cx="200" cy="175" r="80" fill="rgba(255,255,255,0.2)"/>
<path d="M 150 175 L 190 215 L 270 135" stroke="white" stroke-width="8" fill="none" stroke-linecap="round"/>
</svg>
<div class="portfolio-overlay">
<div class="portfolio-title">TechStartup Inc.</div>
<div class="portfolio-category">AI Automation • 300% Growth</div>
<p class="mt-3">Automated customer support system reduced response time by 80%</p>
</div>
</div>
</div>
<div class="col-md-6 fade-in">
<div class="glass-card portfolio-item">
<svg viewBox="0 0 400 350" xmlns="http://www.w3.org/2000/svg" class="portfolio-image">
<rect width="400" height="350" fill="#764ba2"/>
<rect x="100" y="100" width="80" height="150" rx="10" fill="rgba(255,255,255,0.2)"/>
<rect x="200" y="80" width="80" height="170" rx="10" fill="rgba(255,255,255,0.3)"/>
<rect x="300" y="60" width="80" height="190" rx="10" fill="rgba(255,255,255,0.2)"/>
</svg>
<div class="portfolio-overlay">
<div class="portfolio-title">DataFlow Solutions</div>
<div class="portfolio-category">Analytics Platform • 500K Users</div>
<p class="mt-3">Built scalable analytics platform processing 10TB daily</p>
</div>
</div>
</div>
<div class="col-md-6 fade-in">
<div class="glass-card portfolio-item">
<svg viewBox="0 0 400 350" xmlns="http://www.w3.org/2000/svg" class="portfolio-image">
<rect width="400" height="350" fill="#00f2ff"/>
<circle cx="200" cy="175" r="100" fill="none" stroke="rgba(255,255,255,0.3)" stroke-width="3"/>
<circle cx="200" cy="175" r="70" fill="none" stroke="rgba(255,255,255,0.3)" stroke-width="3"/>
<circle cx="200" cy="175" r="40" fill="rgba(255,255,255,0.4)"/>
</svg>
<div class="portfolio-overlay">
<div class="portfolio-title">Marketing Pro Agency</div>
<div class="portfolio-category">Automation Tools • $2M Revenue</div>
<p class="mt-3">Marketing automation increased client retention by 65%</p>
</div>
</div>
</div>
<div class="col-md-6 fade-in">
<div class="glass-card portfolio-item">
<svg viewBox="0 0 400 350" xmlns="http://www.w3.org/2000/svg" class="portfolio-image">
<rect width="400" height="350" fill="#f093fb"/>
<path d="M 50 300 L 100 250 L 150 270 L 200 200 L 250 220 L 300 150 L 350 100"
stroke="white" stroke-width="5" fill="none" stroke-linecap="round"/>
<circle cx="200" cy="200" r="8" fill="white"/>
<circle cx="300" cy="150" r="8" fill="white"/>
<circle cx="350" cy="100" r="8" fill="white"/>
</svg>
<div class="portfolio-overlay">
<div class="portfolio-title">FinTech Innovations</div>
<div class="portfolio-category">ML Predictions • 95% Accuracy</div>
<p class="mt-3">AI-powered fraud detection saved $5M in first quarter</p>
</div>
</div>
</div>
</div>
</div>
</section>
</main>
<footer>
<!-- Footer -->
<div class="footer">
<div class="container">
<div class="row g-4">
<div class="col-lg-4 col-md-6 fadeInLeft">
<h3 class="navbar-brand mb-50"><i class="fa-light fa-sparkles mr-5"></i>NeuralSync</h3>
<p class="text-secondary mb-4">Empowering businesses with cutting-edge AI technology to automate, analyze, and accelerate growth in the digital age.</p>
<div class="social-links">
<a href="#"><i class="fab fa-x-twitter"></i></a>
<a href="#"><i class="bi bi-linkedin"></i></a>
<a href="#"><i class="bi bi-github"></i></a>
<a href="#"><i class="bi bi-instagram"></i></a>
</div>
</div>
<div class="col-lg-2 col-md-6 fadeInUp">
<h3>Product</h3>
<ul>
<li><a href="#features">Features</a></li>
<li><a href="#pricing">Pricing</a></li>
<li><a href="#">Security</a></li>
<li><a href="#">Integrations</a></li>
<li><a href="#">API Docs</a></li>
</ul>
</div>
<div class="col-lg-2 col-md-6 fadeInUp">
<h3>Company</h3>
<ul>
<li><a href="#about">About Us</a></li>
<li><a href="#">Careers</a></li>
<li><a href="#">Blog</a></li>
<li><a href="#">Press Kit</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</div>
<div class="col-lg-2 col-md-6 fadeInUp">
<h3>Resources</h3>
<ul>
<li><a href="#">Documentation</a></li>
<li><a href="#">Tutorials</a></li>
<li><a href="#">Community</a></li>
<li><a href="#">Support</a></li>
<li><a href="#">Status</a></li>
</ul>
</div>
<div class="col-lg-2 col-md-6 fadeInRight">
<h3>Legal</h3>
<ul>
<li><a href="#">Privacy Policy</a></li>
<li><a href="#">Terms of Service</a></li>
<li><a href="#">Cookie Policy</a></li>
<li><a href="#">GDPR</a></li>
</ul>
</div>
</div>
<hr style="border-color: rgba(255,255,255,0.1); margin: 3rem 0 2rem;">
<div class="row align-items-center">
<div class="col-md-6 text-center text-md-start mb-3 mb-md-0">
<p class="text-secondary mb-0">&copy; 2026 NeuralSync. All rights reserved.</p>
</div>
<div class="col-md-6 text-center text-md-end">
<p class="text-secondary mb-0">Made with <span style="color: #f093fb;">?</span> for innovators worldwide</p>
</div>
</div>
</div>
</div>
</footer>
</div>
<!-- END PRELOADER -->
<!-- jQuery, Bootstrap, GSAP -->
<script src="assets/js/jquery.min.js"></script>
<!-- Latest compiled and minified Bootstrap -->
<script src="assets/js/bootstrap.min.js"></script>
<script src="assets/js/plugin.min.js"></script>
<script src="assets/js/gsap.js"></script>
<!-- Template scripts -->
<script src="assets/js/main.js"></script>
</body>
</html>

View File

@@ -0,0 +1,255 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Transform your business with cutting-edge AI solutions. Premium SaaS platform for startups and digital agencies.">
<title>NeuralSync - AI-Powered SaaS Solutions for Modern Businesses HTML Template</title>
<!-- Google Fonts -->
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap" rel="stylesheet">
<!-- Bootstrap 5 -->
<link rel="stylesheet" href="assets/css/bootstrap.min.css">
<!-- Bootstrap Icons -->
<link rel="stylesheet" href="assets/fonts/bootstrap-icons.min.css">
<!-- Font Awesome -->
<link rel="stylesheet" href="assets/fonts/font-awesome.min.css">
<link rel="stylesheet" href="assets/css/slick.min.css">
<link rel="stylesheet" href="assets/css/theme-spacing.min.css">
<!-- Template styles -->
<link rel="stylesheet" href="assets/css/style.css">
<link rel="stylesheet" href="assets/css/responsive.css">
</head>
<body>
<div class="page-wrapper">
<!-- START PRELOADER -->
<div class="preloader">
<div class="status">
<div class="loader">
<div class="loading-1"></div>
<div class="loading-2">Loading...</div>
</div>
</div>
</div>
<!-- END PRELOADER -->
<!-- BACK TO TOP -->
<div class="scroll-top">
<i class="bi bi-arrow-up" style="font-size: 1.5rem; color: white;"></i>
</div>
<!-- BACK TO TOP -->
<!-- Animated Background -->
<div class="animated-bg"></div>
<!-- Navigation -->
<nav class="navbar navbar-expand-lg fixed-top">
<div class="container">
<a class="navbar-brand" href="index.html"><i class="fa-light fa-sparkles mr-5"></i>NeuralSync</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 ms-auto align-items-center">
<li class="nav-item"><a class="nav-link" href="index.html">Home</a></li>
<li class="nav-item"><a class="nav-link" href="features.html">Features</a></li>
<li class="nav-item"><a class="nav-link" href="about.html">About</a></li>
<li class="nav-item"><a class="nav-link" href="portfolio.html">Portfolio</a></li>
<li class="nav-item"><a class="nav-link" href="pricing.html">Pricing</a></li>
<li class="nav-item"><a class="nav-link" href="contact.html">Contact</a></li>
<li class="nav-item ms-3">
<button class="btn-primary-gradient">Get Started</button>
</li>
</ul>
</div>
</div>
</nav>
<main>
<!-- START BREADCRUMB -->
<section class="breadcrumb-area position-relative black-bg breadcrumb-cover-bg breadcrumb-spacing breadcrumb-bg-attach);">
<div class="container">
<div class="row justify-content-center text-center">
<div class="col-xxl-12">
<div class="breadcrumb-content p-relative z-index-2">
<div class="breadcrumb-single-content mb-10">
<span><a href="index.html"><i class="fa-light fa-house fa-fade me-2"></i>HOME</a></span>
<span class="breadcrumb-sub-title">PRICING</span>
</div>
<h3 class="breadcrumb-title split-content end">Our Pricing</h3>
</div>
</div>
</div>
</div>
</section>
<!-- END BREADCRUMB -->
<!-- Pricing Section -->
<section class="atf-section-padding" id="pricing">
<div class="container">
<div class="section-title mb-50 text-center">
<h2 class="title split-content start">Simple, Transparent Pricing</h2>
<p class="section-subtitle fade-in">Choose the perfect plan for your business. All plans include 14-day free trial.</p>
</div>
<div class="row g-4 justify-content-center mt-40">
<div class="col-lg-4 col-md-6 fadeInLeft">
<div class="pricing-card">
<div class="glass-card">
<h3 class="mb-3">Starter</h3>
<p class="text-secondary mb-4">Perfect for small teams and startups</p>
<div class="price">$49<span style="font-size: 1.5rem; color: var(--text-secondary);">/mo</span></div>
<ul class="pricing-features">
<li><i class="bi bi-check-circle-fill"></i> Up to 5 team members</li>
<li><i class="bi bi-check-circle-fill"></i> 10,000 API requests/month</li>
<li><i class="bi bi-check-circle-fill"></i> Basic analytics</li>
<li><i class="bi bi-check-circle-fill"></i> Email support</li>
<li><i class="bi bi-check-circle-fill"></i> 10GB storage</li>
</ul>
<button class="btn-outline-gradient w-100">Get Started</button>
</div>
</div>
</div>
<div class="col-lg-4 col-md-6 fadeInUp">
<div class="pricing-card featured">
<div class="pricing-badge">MOST POPULAR</div>
<div class="glass-card">
<h3 class="mb-3">Professional</h3>
<p class="text-secondary mb-4">For growing businesses and agencies</p>
<div class="price">$149<span style="font-size: 1.5rem; color: var(--text-secondary);">/mo</span></div>
<ul class="pricing-features">
<li><i class="bi bi-check-circle-fill"></i> Up to 25 team members</li>
<li><i class="bi bi-check-circle-fill"></i> 100,000 API requests/month</li>
<li><i class="bi bi-check-circle-fill"></i> Advanced analytics & AI</li>
<li><i class="bi bi-check-circle-fill"></i> Priority support 24/7</li>
<li><i class="bi bi-check-circle-fill"></i> 100GB storage</li>
<li><i class="bi bi-check-circle-fill"></i> Custom integrations</li>
<li><i class="bi bi-check-circle-fill"></i> White-label options</li>
</ul>
<button class="btn-primary-gradient w-100">Get Started</button>
</div>
</div>
</div>
<div class="col-lg-4 col-md-6 fadeInRight">
<div class="pricing-card">
<div class="glass-card">
<h3 class="mb-3">Enterprise</h3>
<p class="text-secondary mb-4">For large organizations with custom needs</p>
<div class="price">Custom</div>
<ul class="pricing-features">
<li><i class="bi bi-check-circle-fill"></i> Unlimited team members</li>
<li><i class="bi bi-check-circle-fill"></i> Unlimited API requests</li>
<li><i class="bi bi-check-circle-fill"></i> Custom AI models</li>
<li><i class="bi bi-check-circle-fill"></i> Dedicated success manager</li>
<li><i class="bi bi-check-circle-fill"></i> Unlimited storage</li>
<li><i class="bi bi-check-circle-fill"></i> On-premise deployment</li>
<li><i class="bi bi-check-circle-fill"></i> SLA guarantee</li>
<li><i class="bi bi-check-circle-fill"></i> Custom contracts</li>
</ul>
<button class="btn-outline-gradient w-100">Contact Sales</button>
</div>
</div>
</div>
</div>
</div>
</section>
</main>
<footer>
<!-- Footer -->
<div class="footer">
<div class="container">
<div class="row g-4">
<div class="col-lg-4 col-md-6 fadeInLeft">
<h3 class="navbar-brand mb-50"><i class="fa-light fa-sparkles mr-5"></i>NeuralSync</h3>
<p class="text-secondary mb-4">Empowering businesses with cutting-edge AI technology to automate, analyze, and accelerate growth in the digital age.</p>
<div class="social-links">
<a href="#"><i class="fab fa-x-twitter"></i></a>
<a href="#"><i class="bi bi-linkedin"></i></a>
<a href="#"><i class="bi bi-github"></i></a>
<a href="#"><i class="bi bi-instagram"></i></a>
</div>
</div>
<div class="col-lg-2 col-md-6 fadeInUp">
<h3>Product</h3>
<ul>
<li><a href="#features">Features</a></li>
<li><a href="#pricing">Pricing</a></li>
<li><a href="#">Security</a></li>
<li><a href="#">Integrations</a></li>
<li><a href="#">API Docs</a></li>
</ul>
</div>
<div class="col-lg-2 col-md-6 fadeInUp">
<h3>Company</h3>
<ul>
<li><a href="#about">About Us</a></li>
<li><a href="#">Careers</a></li>
<li><a href="#">Blog</a></li>
<li><a href="#">Press Kit</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</div>
<div class="col-lg-2 col-md-6 fadeInUp">
<h3>Resources</h3>
<ul>
<li><a href="#">Documentation</a></li>
<li><a href="#">Tutorials</a></li>
<li><a href="#">Community</a></li>
<li><a href="#">Support</a></li>
<li><a href="#">Status</a></li>
</ul>
</div>
<div class="col-lg-2 col-md-6 fadeInRight">
<h3>Legal</h3>
<ul>
<li><a href="#">Privacy Policy</a></li>
<li><a href="#">Terms of Service</a></li>
<li><a href="#">Cookie Policy</a></li>
<li><a href="#">GDPR</a></li>
</ul>
</div>
</div>
<hr style="border-color: rgba(255,255,255,0.1); margin: 3rem 0 2rem;">
<div class="row align-items-center">
<div class="col-md-6 text-center text-md-start mb-3 mb-md-0">
<p class="text-secondary mb-0">&copy; 2026 NeuralSync. All rights reserved.</p>
</div>
<div class="col-md-6 text-center text-md-end">
<p class="text-secondary mb-0">Made with <span style="color: #f093fb;">?</span> for innovators worldwide</p>
</div>
</div>
</div>
</div>
</footer>
</div>
<!-- END PRELOADER -->
<!-- jQuery, Bootstrap, GSAP -->
<script src="assets/js/jquery.min.js"></script>
<!-- Latest compiled and minified Bootstrap -->
<script src="assets/js/bootstrap.min.js"></script>
<script src="assets/js/plugin.min.js"></script>
<script src="assets/js/gsap.js"></script>
<!-- Template scripts -->
<script src="assets/js/main.js"></script>
</body>
</html>

Binary file not shown.

BIN
templates/template_2/eventio/.DS_Store vendored Normal file

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,82 @@
.pln {
color: #48484C; }
.str {
color: #DD1144; }
.kwd {
color: #1E347B; }
.com {
color: #93A1A1; }
.typ {
color: teal; }
.lit {
color: #195F91; }
.pun {
color: #93A1A1; }
.opn {
color: #93A1A1; }
.clo {
color: #93A1A1; }
.tag {
color: #008; }
.atn {
color: teal; }
.atv {
color: #DD1144; }
.dec {
color: teal; }
.var {
color: teal; }
.fun {
color: #DC322F; }
/* Put a border around prettyprinted code snippets. */
pre.prettyprint {
background-color: #F7F7F9;
padding: 10px;
border: 1px solid #E1E1E8; }
pre.prettyprint.linenums {
box-shadow: 40px 0 0 #FBFBFC inset, 41px 0 0 #ECECF0 inset; }
/* Specify class=linenums on a pre to get line numbering */
ol.linenums {
color: #1E347B;
margin: 0 0 0 40px; }
ol.linenums li {
color: #BEBEC5;
line-height: 18px;
padding-left: 12px;
text-shadow: 0 1px 0 #FFFFFF; }
li.L0,
li.L1,
li.L2,
li.L3,
li.L5,
li.L6,
li.L7,
li.L8 {
list-style-type: normal; }
/* Alternate shading for lines */
li.L1,
li.L3,
li.L5,
li.L7,
li.L9 {
background: #eee; }

Some files were not shown because too many files have changed in this diff Show More