Compare commits
6 Commits
92d0343332
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 6710c008c1 | |||
| 0454a06cfc | |||
| 558e0debac | |||
| 25058e4bac | |||
| 7555b2ba8a | |||
| fd567e4230 |
Binary file not shown.
|
After Width: | Height: | Size: 18 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 20 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 100 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 13 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 62 KiB |
+38
-14
@@ -17,7 +17,16 @@
|
|||||||
<meta name="twitter:image" content="https://auraajenticai.cloud/logo.png" />
|
<meta name="twitter:image" content="https://auraajenticai.cloud/logo.png" />
|
||||||
<link rel="canonical" href="https://auraajenticai.cloud" />
|
<link rel="canonical" href="https://auraajenticai.cloud" />
|
||||||
<link rel="icon" type="image/png" href="logo.png" />
|
<link rel="icon" type="image/png" href="logo.png" />
|
||||||
<link rel="apple-touch-icon" href="logo.png" />
|
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
|
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
|
||||||
|
<link rel="icon" type="image/png" sizes="192x192" href="/icon-192.png" />
|
||||||
|
<link rel="icon" type="image/png" sizes="512x512" href="/icon-512.png" />
|
||||||
|
<link rel="manifest" href="/manifest.json" />
|
||||||
|
<meta name="theme-color" content="#080d1a" />
|
||||||
|
<meta name="mobile-web-app-capable" content="yes" />
|
||||||
|
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||||
|
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
|
||||||
|
<meta name="apple-mobile-web-app-title" content="Aura Cloud" />
|
||||||
|
|
||||||
<meta name="google-site-verification" content="vEK4vy89hAbckU9sUlqn7mZlMxLjNT--CvuLruocMfQ" />
|
<meta name="google-site-verification" content="vEK4vy89hAbckU9sUlqn7mZlMxLjNT--CvuLruocMfQ" />
|
||||||
|
|
||||||
@@ -337,18 +346,33 @@
|
|||||||
<script src="https://unpkg.com/react-dom@18.3.1/umd/react-dom.development.js" integrity="sha384-u6aeetuaXnQ38mYT8rp6sbXaQe3NL9t+IBXmnYxwkUI2Hw4bsp2Wvmx4yRQF1uAm" crossorigin="anonymous"></script>
|
<script src="https://unpkg.com/react-dom@18.3.1/umd/react-dom.development.js" integrity="sha384-u6aeetuaXnQ38mYT8rp6sbXaQe3NL9t+IBXmnYxwkUI2Hw4bsp2Wvmx4yRQF1uAm" crossorigin="anonymous"></script>
|
||||||
<script src="https://unpkg.com/@babel/standalone@7.29.0/babel.min.js" integrity="sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y" crossorigin="anonymous"></script>
|
<script src="https://unpkg.com/@babel/standalone@7.29.0/babel.min.js" integrity="sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y" crossorigin="anonymous"></script>
|
||||||
|
|
||||||
<script type="text/babel" src="tweaks-panel.jsx?v=8"></script>
|
<script type="text/babel" src="tweaks-panel.jsx?v=9"></script>
|
||||||
<script type="text/babel" src="src/icons.jsx?v=8"></script>
|
<script type="text/babel" src="src/icons.jsx?v=9"></script>
|
||||||
<script type="text/babel" src="src/data.jsx?v=8"></script>
|
<script type="text/babel" src="src/data.jsx?v=9"></script>
|
||||||
<script type="text/babel" src="src/nav.jsx?v=8"></script>
|
<script type="text/babel" src="src/nav.jsx?v=11"></script>
|
||||||
<script type="text/babel" src="src/hero.jsx?v=8"></script>
|
<script type="text/babel" src="src/hero.jsx?v=9"></script>
|
||||||
<script type="text/babel" src="src/sections.jsx?v=8"></script>
|
<script type="text/babel" src="src/sections.jsx?v=9"></script>
|
||||||
<script type="text/babel" src="src/projects.jsx?v=8"></script>
|
<script type="text/babel" src="src/projects.jsx?v=9"></script>
|
||||||
<script type="text/babel" src="src/agent-showcase.jsx?v=8"></script>
|
<script type="text/babel" src="src/agent-showcase.jsx?v=9"></script>
|
||||||
<script type="text/babel" src="src/timeline-contact.jsx?v=8"></script>
|
<script type="text/babel" src="src/timeline-contact.jsx?v=9"></script>
|
||||||
<script type="text/babel" src="src/command-palette.jsx?v=8"></script>
|
<script type="text/babel" src="src/command-palette.jsx?v=9"></script>
|
||||||
<script type="text/babel" src="src/chatbox.jsx?v=8"></script>
|
<script type="text/babel" src="src/chatbox.jsx?v=9"></script>
|
||||||
<script type="text/babel" src="src/pages.jsx?v=8"></script>
|
<script type="text/babel" src="src/pages.jsx?v=9"></script>
|
||||||
<script type="text/babel" src="src/app.jsx?v=8"></script>
|
<script type="text/babel" src="src/app.jsx?v=11"></script>
|
||||||
|
|
||||||
|
<!-- PWA Service Worker Registration -->
|
||||||
|
<script>
|
||||||
|
if ('serviceWorker' in navigator) {
|
||||||
|
window.addEventListener('load', function() {
|
||||||
|
navigator.serviceWorker.register('/sw.js', { scope: '/' })
|
||||||
|
.then(function(reg) {
|
||||||
|
console.log('[Aura PWA] Service Worker registered with scope:', reg.scope);
|
||||||
|
})
|
||||||
|
.catch(function(err) {
|
||||||
|
console.warn('[Aura PWA] Service Worker registration failed:', err);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -0,0 +1,64 @@
|
|||||||
|
{
|
||||||
|
"name": "Aura Ajentic AI — Enterprise AI & Logistics Platform",
|
||||||
|
"short_name": "Aura Cloud",
|
||||||
|
"description": "Autonomous AI Sales Agents, Courier MCP logistics engine, and real-time COD fraud defense.",
|
||||||
|
"start_url": "/?source=pwa",
|
||||||
|
"scope": "/",
|
||||||
|
"display": "standalone",
|
||||||
|
"orientation": "any",
|
||||||
|
"background_color": "#080d1a",
|
||||||
|
"theme_color": "#080d1a",
|
||||||
|
"lang": "en",
|
||||||
|
"dir": "ltr",
|
||||||
|
"icons": [
|
||||||
|
{
|
||||||
|
"src": "/icon-192.png",
|
||||||
|
"sizes": "192x192",
|
||||||
|
"type": "image/png",
|
||||||
|
"purpose": "any"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "/icon-maskable-192.png",
|
||||||
|
"sizes": "192x192",
|
||||||
|
"type": "image/png",
|
||||||
|
"purpose": "maskable"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "/icon-512.png",
|
||||||
|
"sizes": "512x512",
|
||||||
|
"type": "image/png",
|
||||||
|
"purpose": "any"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "/icon-maskable-512.png",
|
||||||
|
"sizes": "512x512",
|
||||||
|
"type": "image/png",
|
||||||
|
"purpose": "maskable"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"shortcuts": [
|
||||||
|
{
|
||||||
|
"name": "Client Portal Login",
|
||||||
|
"short_name": "Client Login",
|
||||||
|
"description": "Sign in to Aura Client Dashboard",
|
||||||
|
"url": "/?action=client-login",
|
||||||
|
"icons": [{ "src": "/icon-192.png", "sizes": "192x192" }]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Courier Logistics Hub",
|
||||||
|
"short_name": "Courier Hub",
|
||||||
|
"description": "Steadfast, Pathao & RedX Logistics Automation",
|
||||||
|
"url": "/?action=courier-hub",
|
||||||
|
"icons": [{ "src": "/icon-192.png", "sizes": "192x192" }]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "AI Agent Studio",
|
||||||
|
"short_name": "AI Studio",
|
||||||
|
"description": "Omnichannel AI Agent Copilot & Inbox",
|
||||||
|
"url": "/?action=ai-studio",
|
||||||
|
"icons": [{ "src": "/icon-192.png", "sizes": "192x192" }]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"categories": ["business", "productivity", "utilities"],
|
||||||
|
"prefer_related_applications": false
|
||||||
|
}
|
||||||
@@ -33,6 +33,14 @@ server {
|
|||||||
try_files $uri =404;
|
try_files $uri =404;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Legal routes
|
||||||
|
location = /privacy {
|
||||||
|
try_files /privacy.html =404;
|
||||||
|
}
|
||||||
|
location = /terms {
|
||||||
|
try_files /terms.html =404;
|
||||||
|
}
|
||||||
|
|
||||||
# All routes → index.html (SPA / static)
|
# All routes → index.html (SPA / static)
|
||||||
location / {
|
location / {
|
||||||
try_files $uri $uri/ /index.html;
|
try_files $uri $uri/ /index.html;
|
||||||
|
|||||||
+174
@@ -0,0 +1,174 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
<title>Privacy Policy — Aura Ajentic AI Cloud</title>
|
||||||
|
<meta name="description" content="Privacy Policy for Aura Ajentic AI Cloud — how we collect, use, store and protect your data, including data accessed through Google APIs." />
|
||||||
|
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Ctext y='.9em' font-size='90'%3E%E2%98%81%EF%B8%8F%3C/text%3E%3C/svg%3E" />
|
||||||
|
<style>
|
||||||
|
:root{
|
||||||
|
--bg:#030712; --panel:#0b1220; --panel2:#0f172a; --line:#1e293b;
|
||||||
|
--text:#e2e8f0; --muted:#94a3b8; --dim:#64748b;
|
||||||
|
--accent:#4d7cff; --accent2:#38bdf8; --ok:#34d399;
|
||||||
|
--maxw:820px;
|
||||||
|
}
|
||||||
|
*{box-sizing:border-box}
|
||||||
|
html{-webkit-text-size-adjust:100%}
|
||||||
|
body{
|
||||||
|
margin:0; background:var(--bg); color:var(--text);
|
||||||
|
font-family:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;
|
||||||
|
line-height:1.7; font-size:16px;
|
||||||
|
background-image:radial-gradient(1200px 600px at 50% -10%, rgba(77,124,255,.10), transparent 70%);
|
||||||
|
}
|
||||||
|
a{color:var(--accent2); text-decoration:none}
|
||||||
|
a:hover{text-decoration:underline}
|
||||||
|
.wrap{max-width:var(--maxw); margin:0 auto; padding:0 20px}
|
||||||
|
header{padding:48px 0 28px; border-bottom:1px solid var(--line)}
|
||||||
|
.brand{display:flex; align-items:center; gap:10px; font-weight:700; letter-spacing:.2px}
|
||||||
|
.logo{width:30px;height:30px;border-radius:8px;background:linear-gradient(135deg,var(--accent),var(--accent2));display:flex;align-items:center;justify-content:center;font-size:16px}
|
||||||
|
.brand small{display:block; color:var(--muted); font-weight:500; font-size:12px; letter-spacing:.14em; text-transform:uppercase}
|
||||||
|
h1{font-size:clamp(28px,5vw,40px); margin:26px 0 8px; letter-spacing:-.02em; text-wrap:balance}
|
||||||
|
.updated{color:var(--dim); font-size:13px; font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
|
||||||
|
main{padding:36px 0 20px}
|
||||||
|
section{margin:0 0 30px}
|
||||||
|
h2{font-size:20px; margin:34px 0 12px; letter-spacing:-.01em; color:#fff}
|
||||||
|
h2 .num{color:var(--accent); font-family:ui-monospace,monospace; font-size:14px; margin-right:10px}
|
||||||
|
h3{font-size:16px; margin:20px 0 8px; color:#cbd5e1}
|
||||||
|
p{color:#cbd5e1; margin:10px 0}
|
||||||
|
ul{margin:10px 0; padding-left:22px}
|
||||||
|
li{margin:7px 0; color:#cbd5e1}
|
||||||
|
strong{color:#fff}
|
||||||
|
.lead{font-size:18px; color:var(--muted)}
|
||||||
|
.callout{border:1px solid rgba(77,124,255,.35); background:linear-gradient(180deg,rgba(77,124,255,.08),rgba(56,189,248,.04)); border-radius:14px; padding:18px 20px; margin:20px 0}
|
||||||
|
.callout .tag{display:inline-block; font-size:11px; letter-spacing:.12em; text-transform:uppercase; color:var(--accent2); font-weight:700; margin-bottom:6px}
|
||||||
|
.toc{border:1px solid var(--line); background:var(--panel); border-radius:14px; padding:16px 20px; margin:24px 0}
|
||||||
|
.toc ol{margin:6px 0 0; padding-left:20px; columns:2; column-gap:28px}
|
||||||
|
.toc a{color:#cbd5e1; font-size:14px}
|
||||||
|
code{background:var(--panel2); border:1px solid var(--line); border-radius:6px; padding:1px 6px; font-family:ui-monospace,monospace; font-size:.9em; color:#e2e8f0}
|
||||||
|
footer{border-top:1px solid var(--line); padding:26px 0 60px; color:var(--dim); font-size:13px}
|
||||||
|
footer a{color:var(--muted)}
|
||||||
|
@media (max-width:640px){ .toc ol{columns:1} }
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="wrap">
|
||||||
|
<header>
|
||||||
|
<div class="brand"><span class="logo">☁️</span><span>Aura Ajentic AI Cloud<small>Agentic AI for business</small></span></div>
|
||||||
|
<h1>Privacy Policy</h1>
|
||||||
|
<div class="updated">Last updated: September 21, 2026 · Effective immediately</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<main>
|
||||||
|
<p class="lead">Aura Ajentic AI Cloud (“Aura”, “we”, “us”) provides an agentic-AI business platform: an omnichannel sales inbox, CRM, courier logistics, and marketing analytics that businesses connect to their own accounts. This policy explains what we collect, how we use it, and the choices you have — with a dedicated section on data we access through Google APIs.</p>
|
||||||
|
|
||||||
|
<div class="toc">
|
||||||
|
<strong style="font-size:13px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)">Contents</strong>
|
||||||
|
<ol>
|
||||||
|
<li><a href="#who">Who this covers</a></li>
|
||||||
|
<li><a href="#collect">Information we collect</a></li>
|
||||||
|
<li><a href="#google">Google user data</a></li>
|
||||||
|
<li><a href="#use">How we use data</a></li>
|
||||||
|
<li><a href="#share">Sharing & disclosure</a></li>
|
||||||
|
<li><a href="#store">Storage & security</a></li>
|
||||||
|
<li><a href="#retention">Retention</a></li>
|
||||||
|
<li><a href="#rights">Your choices & rights</a></li>
|
||||||
|
<li><a href="#children">Children</a></li>
|
||||||
|
<li><a href="#changes">Changes</a></li>
|
||||||
|
<li><a href="#contact">Contact</a></li>
|
||||||
|
</ol>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<section id="who">
|
||||||
|
<h2><span class="num">01</span>Who this covers</h2>
|
||||||
|
<p>This policy applies to the Aura Ajentic AI Cloud web application and its dashboards (including <code>client.auraajenticai.cloud</code>) and to any account holder who connects a third‑party account (such as Meta, WooCommerce, or Google Analytics) to Aura.</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="collect">
|
||||||
|
<h2><span class="num">02</span>Information we collect</h2>
|
||||||
|
<ul>
|
||||||
|
<li><strong>Account information</strong> — your name, email address, business name, and login credentials (passwords are stored only as salted one‑way hashes).</li>
|
||||||
|
<li><strong>Business content</strong> — messages, orders, products and analytics that flow through the tools you enable, so we can show them back to you in your dashboard.</li>
|
||||||
|
<li><strong>Connected‑account data</strong> — read‑only data from services you explicitly connect (for example Meta Ads/Pixel insights, WooCommerce store reports, and Google Analytics reports).</li>
|
||||||
|
<li><strong>Technical data</strong> — basic logs needed to operate and secure the service.</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="google">
|
||||||
|
<h2><span class="num">03</span>Google user data</h2>
|
||||||
|
<p>When you choose <strong>“Connect Google Analytics”</strong>, Aura uses Google OAuth to request a single, read‑only scope:</p>
|
||||||
|
<ul>
|
||||||
|
<li><code>https://www.googleapis.com/auth/analytics.readonly</code> — “See and download your Google Analytics data.”</li>
|
||||||
|
</ul>
|
||||||
|
<p>With your consent we access, on your behalf and only for the GA4 property <em>you</em> select, reporting metrics such as active users, sessions, page views, engagement, average session duration, top pages, traffic channels and countries. We use this <strong>solely to display your website analytics inside your own Aura dashboard.</strong></p>
|
||||||
|
<ul>
|
||||||
|
<li>We store an <strong>encrypted OAuth refresh token</strong> so we can fetch your reports when you open the dashboard. <strong>We never receive or store your Google password.</strong></li>
|
||||||
|
<li>We do <strong>not</strong> use Google user data for advertising, we do <strong>not</strong> sell it, and we do <strong>not</strong> use it to train machine‑learning or AI models.</li>
|
||||||
|
<li>You can revoke Aura’s access at any time from your Google Account at <a href="https://myaccount.google.com/permissions" rel="noopener" target="_blank">myaccount.google.com/permissions</a>, or by disconnecting inside the Aura dashboard.</li>
|
||||||
|
</ul>
|
||||||
|
<div class="callout">
|
||||||
|
<span class="tag">Limited Use</span>
|
||||||
|
<p style="margin:0">Aura Ajentic AI Cloud’s use and transfer of information received from Google APIs to any other app will adhere to the <a href="https://developers.google.com/terms/api-services-user-data-policy" rel="noopener" target="_blank">Google API Services User Data Policy</a>, including the <strong>Limited Use</strong> requirements.</p>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="use">
|
||||||
|
<h2><span class="num">04</span>How we use data</h2>
|
||||||
|
<ul>
|
||||||
|
<li>To provide the features you turn on and to display your own data back to you.</li>
|
||||||
|
<li>To operate, secure, debug and improve the service.</li>
|
||||||
|
<li>To communicate with you about your account and support requests.</li>
|
||||||
|
</ul>
|
||||||
|
<p>We do not sell your personal information, and we do not use connected‑account data for any purpose beyond delivering the feature you connected it for.</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="share">
|
||||||
|
<h2><span class="num">05</span>Sharing & disclosure</h2>
|
||||||
|
<p>We share data only with infrastructure providers strictly needed to run Aura (for example our hosting provider), under confidentiality obligations, and only to the extent required to operate the service. We may disclose information if required by law. Each customer’s data is isolated per account (multi‑tenant), and one customer can never see another customer’s data.</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="store">
|
||||||
|
<h2><span class="num">06</span>Storage & security</h2>
|
||||||
|
<p>Access tokens and sensitive connection secrets are <strong>encrypted at rest</strong>. Access is restricted, transport is over HTTPS/TLS, and data is separated by tenant. No method of storage is perfectly secure, but we take reasonable measures appropriate to the sensitivity of the data.</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="retention">
|
||||||
|
<h2><span class="num">07</span>Retention</h2>
|
||||||
|
<p>We keep connected‑account credentials only while the connection is active. When you disconnect a service or delete your account, we delete the associated tokens. You may request deletion of your data at any time (see Contact).</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="rights">
|
||||||
|
<h2><span class="num">08</span>Your choices & rights</h2>
|
||||||
|
<ul>
|
||||||
|
<li>Connect or disconnect any third‑party service at any time from the dashboard.</li>
|
||||||
|
<li>Revoke Google access from your Google Account permissions page.</li>
|
||||||
|
<li>Request access to, correction of, or deletion of your personal data by emailing us.</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="children">
|
||||||
|
<h2><span class="num">09</span>Children</h2>
|
||||||
|
<p>Aura is a business tool and is not directed to children under 13 (or the minimum age in your country). We do not knowingly collect data from children.</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="changes">
|
||||||
|
<h2><span class="num">10</span>Changes to this policy</h2>
|
||||||
|
<p>We may update this policy from time to time. Material changes will be reflected by updating the “Last updated” date at the top of this page.</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="contact">
|
||||||
|
<h2><span class="num">11</span>Contact</h2>
|
||||||
|
<p>Questions or data requests? Contact us:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Email: <a href="mailto:ceo@auraajenticai.cloud">ceo@auraajenticai.cloud</a></li>
|
||||||
|
<li>Website: <a href="https://auraajenticai.cloud" rel="noopener" target="_blank">auraajenticai.cloud</a></li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
© 2026 Aura Ajentic AI Cloud. All rights reserved. · <a href="https://auraajenticai.cloud" rel="noopener" target="_blank">auraajenticai.cloud</a>
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -311,7 +311,6 @@ const PORTFOLIO_DATA = {
|
|||||||
badge: "Self-Serve",
|
badge: "Self-Serve",
|
||||||
price: 19,
|
price: 19,
|
||||||
period: "/month",
|
period: "/month",
|
||||||
bdtPrice: "৳১,৯৯৯ / মাস",
|
|
||||||
description: "Autonomous AI sales agent for growing online shops and brands.",
|
description: "Autonomous AI sales agent for growing online shops and brands.",
|
||||||
color: "violet",
|
color: "violet",
|
||||||
features: [
|
features: [
|
||||||
@@ -331,7 +330,6 @@ const PORTFOLIO_DATA = {
|
|||||||
badge: "Most Popular",
|
badge: "Most Popular",
|
||||||
price: 49,
|
price: 49,
|
||||||
period: "/month",
|
period: "/month",
|
||||||
bdtPrice: "৳৪,৯৯৯ / মাস",
|
|
||||||
description: "Full omnichannel closing machine, COD fraud defense & multi-carrier MCP.",
|
description: "Full omnichannel closing machine, COD fraud defense & multi-carrier MCP.",
|
||||||
color: "cyan",
|
color: "cyan",
|
||||||
features: [
|
features: [
|
||||||
@@ -352,7 +350,6 @@ const PORTFOLIO_DATA = {
|
|||||||
badge: "Custom Cloud",
|
badge: "Custom Cloud",
|
||||||
price: null,
|
price: null,
|
||||||
period: null,
|
period: null,
|
||||||
bdtPrice: "Custom Architecture",
|
|
||||||
description: "Dedicated enterprise infrastructure, custom LLM fine-tuning & ERP integration.",
|
description: "Dedicated enterprise infrastructure, custom LLM fine-tuning & ERP integration.",
|
||||||
color: "amber",
|
color: "amber",
|
||||||
features: [
|
features: [
|
||||||
|
|||||||
+246
-10
@@ -1,24 +1,42 @@
|
|||||||
// Top nav — minimal, sticky, blurred — mobile-responsive
|
// Top nav — minimal, sticky, blurred — mobile-responsive + PWA Install & Client Gateway
|
||||||
const NAV_LINKS = [
|
const NAV_LINKS = [
|
||||||
{ id: "services", label: "Services", labelBn: "সার্ভিস", url: "#/services" },
|
{ id: "services", label: "Services", labelBn: "সার্ভিস", url: "#/services" },
|
||||||
{ id: "case-studies", label: "Case Studies", labelBn: "কেস স্টাডি", url: "#/case-studies" },
|
{ id: "case-studies", label: "Case Studies", labelBn: "কেস স্টাডি", url: "#/case-studies" },
|
||||||
{ id: "pricing", label: "Pricing", labelBn: "মূল্য", url: "#/pricing" },
|
{ id: "pricing", label: "Pricing", labelBn: "মূল্য", url: "#/pricing" },
|
||||||
{ id: "blog", label: "Blog", labelBn: "ব্লগ", url: "#/blog" },
|
{ id: "blog", label: "Blog", labelBn: "ব্লগ", url: "#/blog" },
|
||||||
{ id: "contact", label: "Contact", labelBn: "যোগাযোগ", url: "#/contact" },
|
{ id: "contact", label: "Contact", labelBn: "যোগাযোগ", url: "#/contact" },
|
||||||
]
|
];
|
||||||
|
|
||||||
const NAV_TXT = {
|
const NAV_TXT = {
|
||||||
en: { search: "Search", getQuote: "Get a Quote", clientLogin: "Client Login", getStarted: "Get Started" },
|
en: {
|
||||||
bn: { search: "খুঁজুন", getQuote: "কোট নিন", clientLogin: "ক্লায়েন্ট লগইন", getStarted: "শুরু করুন" },
|
search: "Search",
|
||||||
|
getQuote: "Get a Quote",
|
||||||
|
clientLogin: "Client Login",
|
||||||
|
getStarted: "Get Started",
|
||||||
|
installApp: "Install App",
|
||||||
|
appInstalled: "App Installed",
|
||||||
|
},
|
||||||
|
bn: {
|
||||||
|
search: "খুঁজুন",
|
||||||
|
getQuote: "কোট নিন",
|
||||||
|
clientLogin: "ক্লায়েন্ট লগইন",
|
||||||
|
getStarted: "শুরু করুন",
|
||||||
|
installApp: "অ্যাপ ইনস্টল",
|
||||||
|
appInstalled: "অ্যাপ ইনস্টলড",
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
// Where a self-serve account should land right after signing up -- the client portal's own
|
// Next redirects ensure clients land seamlessly in the right SaaS portal
|
||||||
// service catalog, not a blank dashboard. aura-auth's /register already reads and honors `next`.
|
|
||||||
const REGISTER_URL = "https://auth.auraajenticai.cloud/register?next=" + encodeURIComponent("https://client.auraajenticai.cloud/services");
|
const REGISTER_URL = "https://auth.auraajenticai.cloud/register?next=" + encodeURIComponent("https://client.auraajenticai.cloud/services");
|
||||||
|
const CLIENT_LOGIN_URL = "https://auth.auraajenticai.cloud/login?next=" + encodeURIComponent("https://client.auraajenticai.cloud");
|
||||||
|
|
||||||
const Nav = ({ onCmdK, theme, onToggleTheme, accent, lang, onToggleLang, route }) => {
|
const Nav = ({ onCmdK, theme, onToggleTheme, accent, lang, onToggleLang, route }) => {
|
||||||
const [scrolled, setScrolled] = React.useState(false);
|
const [scrolled, setScrolled] = React.useState(false);
|
||||||
const [menuOpen, setMenuOpen] = React.useState(false);
|
const [menuOpen, setMenuOpen] = React.useState(false);
|
||||||
|
const [installModalOpen, setInstallModalOpen] = React.useState(false);
|
||||||
|
const [deferredPrompt, setDeferredPrompt] = React.useState(null);
|
||||||
|
const [isInstalled, setIsInstalled] = React.useState(false);
|
||||||
|
|
||||||
const links = NAV_LINKS;
|
const links = NAV_LINKS;
|
||||||
const t = NAV_TXT[lang] || NAV_TXT.en;
|
const t = NAV_TXT[lang] || NAV_TXT.en;
|
||||||
const bn = lang === "bn";
|
const bn = lang === "bn";
|
||||||
@@ -29,6 +47,49 @@ const Nav = ({ onCmdK, theme, onToggleTheme, accent, lang, onToggleLang, route }
|
|||||||
return () => window.removeEventListener("scroll", onScroll);
|
return () => window.removeEventListener("scroll", onScroll);
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
// PWA standalone detection & prompt listener
|
||||||
|
React.useEffect(() => {
|
||||||
|
const isStandalone = window.matchMedia("(display-mode: standalone)").matches || window.navigator.standalone === true;
|
||||||
|
if (isStandalone) {
|
||||||
|
setIsInstalled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleBeforeInstall = (e) => {
|
||||||
|
e.preventDefault();
|
||||||
|
setDeferredPrompt(e);
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleAppInstalled = () => {
|
||||||
|
setIsInstalled(true);
|
||||||
|
setDeferredPrompt(null);
|
||||||
|
};
|
||||||
|
|
||||||
|
window.addEventListener("beforeinstallprompt", handleBeforeInstall);
|
||||||
|
window.addEventListener("appinstalled", handleAppInstalled);
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
window.removeEventListener("beforeinstallprompt", handleBeforeInstall);
|
||||||
|
window.removeEventListener("appinstalled", handleAppInstalled);
|
||||||
|
};
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
const handleInstallClick = async () => {
|
||||||
|
if (deferredPrompt) {
|
||||||
|
try {
|
||||||
|
deferredPrompt.prompt();
|
||||||
|
const choice = await deferredPrompt.userChoice;
|
||||||
|
if (choice && choice.outcome === "accepted") {
|
||||||
|
setIsInstalled(true);
|
||||||
|
setDeferredPrompt(null);
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.warn("PWA install prompt error:", err);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
setInstallModalOpen(true);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<nav style={{
|
<nav style={{
|
||||||
@@ -138,6 +199,32 @@ const Nav = ({ onCmdK, theme, onToggleTheme, accent, lang, onToggleLang, route }
|
|||||||
{lang === "en" ? "বাং" : "EN"}
|
{lang === "en" ? "বাং" : "EN"}
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
|
{/* PWA Install Button (Desktop) */}
|
||||||
|
{!isInstalled && (
|
||||||
|
<button
|
||||||
|
onClick={handleInstallClick}
|
||||||
|
className="nav-install-btn"
|
||||||
|
title={bn ? "Aura Cloud অ্যাপ আপনার ডিভাইসে ইনস্টল করুন" : "Install Aura Cloud App on your device"}
|
||||||
|
style={{
|
||||||
|
display: "inline-flex",
|
||||||
|
alignItems: "center",
|
||||||
|
gap: 6,
|
||||||
|
padding: "6px 11px",
|
||||||
|
background: "linear-gradient(135deg, rgba(124,92,255,0.16), rgba(0,212,255,0.16))",
|
||||||
|
border: "1px solid rgba(124,92,255,0.45)",
|
||||||
|
borderRadius: 8,
|
||||||
|
color: "var(--text)",
|
||||||
|
fontSize: 12.5,
|
||||||
|
fontWeight: 600,
|
||||||
|
cursor: "pointer",
|
||||||
|
whiteSpace: "nowrap",
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<span>📲</span>
|
||||||
|
<span>{t.installApp}</span>
|
||||||
|
</button>
|
||||||
|
)}
|
||||||
|
|
||||||
<a href="mailto:ceo@auraajenticai.cloud?subject=Project Quote" className="nav-quote-btn" style={{
|
<a href="mailto:ceo@auraajenticai.cloud?subject=Project Quote" className="nav-quote-btn" style={{
|
||||||
padding: "7px 13px",
|
padding: "7px 13px",
|
||||||
background: "transparent",
|
background: "transparent",
|
||||||
@@ -152,7 +239,10 @@ const Nav = ({ onCmdK, theme, onToggleTheme, accent, lang, onToggleLang, route }
|
|||||||
{t.getQuote}
|
{t.getQuote}
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<a href="https://auth.auraajenticai.cloud/login" className="nav-login-btn" style={{
|
<a
|
||||||
|
href={CLIENT_LOGIN_URL}
|
||||||
|
className="nav-login-btn"
|
||||||
|
style={{
|
||||||
padding: "8px 12px",
|
padding: "8px 12px",
|
||||||
background: "transparent",
|
background: "transparent",
|
||||||
border: "1px solid var(--line)",
|
border: "1px solid var(--line)",
|
||||||
@@ -162,7 +252,8 @@ const Nav = ({ onCmdK, theme, onToggleTheme, accent, lang, onToggleLang, route }
|
|||||||
fontWeight: 500,
|
fontWeight: 500,
|
||||||
textDecoration: "none",
|
textDecoration: "none",
|
||||||
whiteSpace: "nowrap",
|
whiteSpace: "nowrap",
|
||||||
}}>
|
}}
|
||||||
|
>
|
||||||
{t.clientLogin}
|
{t.clientLogin}
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
@@ -220,6 +311,7 @@ const Nav = ({ onCmdK, theme, onToggleTheme, accent, lang, onToggleLang, route }
|
|||||||
@media (max-width: 640px) {
|
@media (max-width: 640px) {
|
||||||
.nav-search-btn { display: none !important; }
|
.nav-search-btn { display: none !important; }
|
||||||
.nav-quote-btn { display: none !important; }
|
.nav-quote-btn { display: none !important; }
|
||||||
|
.nav-install-btn { display: none !important; }
|
||||||
.nav-badge { display: none !important; }
|
.nav-badge { display: none !important; }
|
||||||
}
|
}
|
||||||
@media (max-width: 480px) {
|
@media (max-width: 480px) {
|
||||||
@@ -246,7 +338,51 @@ const Nav = ({ onCmdK, theme, onToggleTheme, accent, lang, onToggleLang, route }
|
|||||||
display: "flex",
|
display: "flex",
|
||||||
flexDirection: "column",
|
flexDirection: "column",
|
||||||
gap: 2,
|
gap: 2,
|
||||||
|
maxHeight: "calc(100vh - 64px)",
|
||||||
|
overflowY: "auto",
|
||||||
}}>
|
}}>
|
||||||
|
{/* Mobile PWA Install Banner */}
|
||||||
|
{!isInstalled && (
|
||||||
|
<div style={{
|
||||||
|
padding: "12px 14px",
|
||||||
|
borderRadius: 12,
|
||||||
|
background: "linear-gradient(135deg, rgba(124,92,255,0.18), rgba(0,212,255,0.18))",
|
||||||
|
border: "1px solid rgba(124,92,255,0.35)",
|
||||||
|
display: "flex",
|
||||||
|
alignItems: "center",
|
||||||
|
justifyContent: "space-between",
|
||||||
|
marginBottom: 10,
|
||||||
|
}}>
|
||||||
|
<div>
|
||||||
|
<div style={{ fontWeight: 600, fontSize: 13, color: "var(--text)" }}>
|
||||||
|
{bn ? "📲 Aura Cloud অ্যাপ" : "📲 Aura Cloud App"}
|
||||||
|
</div>
|
||||||
|
<div style={{ fontSize: 11, color: "var(--text-dim)", marginTop: 2 }}>
|
||||||
|
{bn ? "হোমস্ক্রিনে ১-ট্যাপে ইনস্টল করুন" : "Install to home screen for 1-tap launch"}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<button
|
||||||
|
onClick={() => {
|
||||||
|
setMenuOpen(false);
|
||||||
|
handleInstallClick();
|
||||||
|
}}
|
||||||
|
style={{
|
||||||
|
padding: "6px 12px",
|
||||||
|
background: "var(--text)",
|
||||||
|
color: "var(--bg)",
|
||||||
|
border: "none",
|
||||||
|
borderRadius: 8,
|
||||||
|
fontSize: 12,
|
||||||
|
fontWeight: 600,
|
||||||
|
cursor: "pointer",
|
||||||
|
whiteSpace: "nowrap",
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{bn ? "ইনস্টল" : "Install"}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
|
||||||
{links.map(l => (
|
{links.map(l => (
|
||||||
<a
|
<a
|
||||||
key={l.id}
|
key={l.id}
|
||||||
@@ -298,9 +434,9 @@ const Nav = ({ onCmdK, theme, onToggleTheme, accent, lang, onToggleLang, route }
|
|||||||
fontSize: 13,
|
fontSize: 13,
|
||||||
textDecoration: "none",
|
textDecoration: "none",
|
||||||
}}
|
}}
|
||||||
>{t.getQuote}</a>
|
>{t.quote}</a>
|
||||||
<a
|
<a
|
||||||
href="https://auth.auraajenticai.cloud/login"
|
href={CLIENT_LOGIN_URL}
|
||||||
onClick={() => setMenuOpen(false)}
|
onClick={() => setMenuOpen(false)}
|
||||||
style={{
|
style={{
|
||||||
padding: "8px 14px",
|
padding: "8px 14px",
|
||||||
@@ -329,6 +465,106 @@ const Nav = ({ onCmdK, theme, onToggleTheme, accent, lang, onToggleLang, route }
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
{/* PWA Install Help Modal (iOS & Fallback) */}
|
||||||
|
{installModalOpen && (
|
||||||
|
<div
|
||||||
|
onClick={() => setInstallModalOpen(false)}
|
||||||
|
style={{
|
||||||
|
position: "fixed",
|
||||||
|
inset: 0,
|
||||||
|
zIndex: 100,
|
||||||
|
background: "rgba(0, 0, 0, 0.72)",
|
||||||
|
backdropFilter: "blur(10px)",
|
||||||
|
WebkitBackdropFilter: "blur(10px)",
|
||||||
|
display: "grid",
|
||||||
|
placeItems: "center",
|
||||||
|
padding: 16,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
onClick={(e) => e.stopPropagation()}
|
||||||
|
style={{
|
||||||
|
position: "relative",
|
||||||
|
width: "100%",
|
||||||
|
maxWidth: 440,
|
||||||
|
background: "var(--bg-card, #0c1222)",
|
||||||
|
border: "1px solid rgba(0, 212, 255, 0.35)",
|
||||||
|
borderRadius: 16,
|
||||||
|
padding: "24px 22px",
|
||||||
|
boxShadow: "0 24px 60px rgba(0, 0, 0, 0.6)",
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<div style={{ display: "flex", alignItems: "center", justifyContent: "space-between", marginBottom: 14 }}>
|
||||||
|
<div style={{ display: "flex", alignItems: "center", gap: 8 }}>
|
||||||
|
<span style={{ fontSize: 22 }}>📲</span>
|
||||||
|
<h3 style={{ margin: 0, fontSize: 16, fontWeight: 600, color: "var(--text)" }}>
|
||||||
|
{bn ? "Aura Cloud অ্যাপ ইনস্টল গাইড" : "Install Aura Cloud App"}
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
<button
|
||||||
|
onClick={() => setInstallModalOpen(false)}
|
||||||
|
style={{ background: "transparent", border: "none", color: "var(--text-dim)", cursor: "pointer", fontSize: 18 }}
|
||||||
|
>
|
||||||
|
✕
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p style={{ fontSize: 13, color: "var(--text-dim)", lineHeight: 1.5, margin: "0 0 16px" }}>
|
||||||
|
{bn
|
||||||
|
? "Aura Cloud অ্যাপ আপনার মোবাইল বা কম্পিউটারে ইনস্টল করে সরাসরি ১-ট্যাপে ওপেন করুন:"
|
||||||
|
: "Install the Aura Cloud App directly to your device for 1-tap instant launch and offline access:"}
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div style={{ display: "flex", flexDirection: "column", gap: 10, fontSize: 12.5, color: "var(--text)" }}>
|
||||||
|
<div style={{ padding: "10px 12px", background: "rgba(255,255,255,0.03)", borderRadius: 8, border: "1px solid var(--line)" }}>
|
||||||
|
<strong>🍏 iOS / iPhone (Safari):</strong>
|
||||||
|
<div style={{ color: "var(--text-dim)", marginTop: 4 }}>
|
||||||
|
{bn
|
||||||
|
? "সাফারি ব্রাউজারের নিচে শেয়ার বাটনে (Share ⎋) ট্যাপ করুন, এরপর নিচে স্ক্রল করে 'Add to Home Screen ⊞' সিলেক্ট করুন।"
|
||||||
|
: "Tap the Share icon (⎋) at bottom of Safari, scroll down and tap 'Add to Home Screen ⊞'."}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div style={{ padding: "10px 12px", background: "rgba(255,255,255,0.03)", borderRadius: 8, border: "1px solid var(--line)" }}>
|
||||||
|
<strong>🤖 Android (Chrome):</strong>
|
||||||
|
<div style={{ color: "var(--text-dim)", marginTop: 4 }}>
|
||||||
|
{bn
|
||||||
|
? "ব্রাউজারের উপরের ডান কোণায় ৩-ডট মেনুতে (⋮) ট্যাপ করে 'Install app' বা 'Add to Home screen' নির্বাচন করুন।"
|
||||||
|
: "Tap the 3 dots menu (⋮) in Chrome and select 'Install app' or 'Add to Home screen'."}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div style={{ padding: "10px 12px", background: "rgba(255,255,255,0.03)", borderRadius: 8, border: "1px solid var(--line)" }}>
|
||||||
|
<strong>💻 Windows / Mac (Chrome & Edge):</strong>
|
||||||
|
<div style={{ color: "var(--text-dim)", marginTop: 4 }}>
|
||||||
|
{bn
|
||||||
|
? "ব্রাউজারের অ্যাড্রেস বারের ডানপাশে ইনস্টল আইকন (⊕) ক্লিক করে ইনস্টল করুন।"
|
||||||
|
: "Click the Install icon (⊕) in the browser address bar to install to desktop."}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<button
|
||||||
|
onClick={() => setInstallModalOpen(false)}
|
||||||
|
style={{
|
||||||
|
width: "100%",
|
||||||
|
marginTop: 18,
|
||||||
|
padding: "10px",
|
||||||
|
background: "var(--text)",
|
||||||
|
color: "var(--bg)",
|
||||||
|
border: "none",
|
||||||
|
borderRadius: 8,
|
||||||
|
fontWeight: 600,
|
||||||
|
fontSize: 13,
|
||||||
|
cursor: "pointer",
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{bn ? "ঠিক আছে, বুঝেছি" : "Got it"}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -586,27 +586,13 @@ const PricingPage = () => {
|
|||||||
|
|
||||||
<div style={{ marginBottom: 28 }}>
|
<div style={{ marginBottom: 28 }}>
|
||||||
{tier.price ? (
|
{tier.price ? (
|
||||||
<div>
|
|
||||||
<div style={{ display: "flex", alignItems: "baseline", gap: 4 }}>
|
<div style={{ display: "flex", alignItems: "baseline", gap: 4 }}>
|
||||||
<span style={{ fontSize: 13, color: "var(--text-faint)" }}>USD</span>
|
<span style={{ fontSize: 13, color: "var(--text-faint)" }}>USD</span>
|
||||||
<span style={{ fontSize: 40, fontWeight: 700, letterSpacing: "-0.03em", color: c.text }}>${tier.price.toLocaleString()}</span>
|
<span style={{ fontSize: 40, fontWeight: 700, letterSpacing: "-0.03em", color: c.text }}>${tier.price.toLocaleString()}</span>
|
||||||
<span style={{ fontSize: 13, color: "var(--text-faint)", fontFamily: "var(--font-mono)" }}>{tier.period}</span>
|
<span style={{ fontSize: 13, color: "var(--text-faint)", fontFamily: "var(--font-mono)" }}>{tier.period}</span>
|
||||||
</div>
|
</div>
|
||||||
{tier.bdtPrice && (
|
|
||||||
<div style={{ fontSize: 12.5, color: "var(--text-dim)", marginTop: 4, fontFamily: "var(--font-mono)" }}>
|
|
||||||
≈ {tier.bdtPrice}
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
) : (
|
) : (
|
||||||
<div>
|
|
||||||
<div style={{ fontSize: 28, fontWeight: 700, color: c.text }}>Custom Architecture</div>
|
<div style={{ fontSize: 28, fontWeight: 700, color: c.text }}>Custom Architecture</div>
|
||||||
{tier.bdtPrice && (
|
|
||||||
<div style={{ fontSize: 12.5, color: "var(--text-dim)", marginTop: 4, fontFamily: "var(--font-mono)" }}>
|
|
||||||
{tier.bdtPrice}
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,81 @@
|
|||||||
|
// Aura Cloud Service Worker — High-Performance Offline & Shell Cache v2.0
|
||||||
|
const CACHE_NAME = 'aura-cloud-pwa-v3';
|
||||||
|
|
||||||
|
const STATIC_PRECACHE = [
|
||||||
|
'/',
|
||||||
|
'/index.html',
|
||||||
|
'/manifest.json',
|
||||||
|
'/logo.png',
|
||||||
|
'/apple-touch-icon.png',
|
||||||
|
'/icon-192.png',
|
||||||
|
'/icon-512.png',
|
||||||
|
'/icon-maskable-192.png',
|
||||||
|
'/icon-maskable-512.png',
|
||||||
|
'/privacy.html',
|
||||||
|
'/terms.html'
|
||||||
|
];
|
||||||
|
|
||||||
|
self.addEventListener('install', (event) => {
|
||||||
|
event.waitUntil(
|
||||||
|
caches.open(CACHE_NAME).then((cache) => {
|
||||||
|
return cache.addAll(STATIC_PRECACHE).catch((err) => {
|
||||||
|
console.warn('[Aura PWA SW] Pre-cache initial warning:', err);
|
||||||
|
});
|
||||||
|
}).then(() => self.skipWaiting())
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
self.addEventListener('activate', (event) => {
|
||||||
|
event.waitUntil(
|
||||||
|
caches.keys().then((keys) => {
|
||||||
|
return Promise.all(
|
||||||
|
keys.filter((k) => k !== CACHE_NAME).map((k) => caches.delete(k))
|
||||||
|
);
|
||||||
|
}).then(() => self.clients.claim())
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
self.addEventListener('fetch', (event) => {
|
||||||
|
const req = event.request;
|
||||||
|
const url = new URL(req.url);
|
||||||
|
|
||||||
|
// 1. Bypass external/cross-origin requests (Auth, Analytics, Fonts, APIs)
|
||||||
|
if (url.origin !== self.location.origin) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. Network-first strategy for navigation / HTML routes (instant updates)
|
||||||
|
if (req.mode === 'navigate' || req.headers.get('accept')?.includes('text/html')) {
|
||||||
|
event.respondWith(
|
||||||
|
fetch(req)
|
||||||
|
.then((networkRes) => {
|
||||||
|
if (networkRes && networkRes.ok) {
|
||||||
|
const clone = networkRes.clone();
|
||||||
|
caches.open(CACHE_NAME).then((cache) => cache.put(req, clone));
|
||||||
|
}
|
||||||
|
return networkRes;
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
return caches.match(req).then((cached) => cached || caches.match('/index.html'));
|
||||||
|
})
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. Stale-while-revalidate for same-origin static assets
|
||||||
|
event.respondWith(
|
||||||
|
caches.match(req).then((cached) => {
|
||||||
|
const fetchPromise = fetch(req)
|
||||||
|
.then((networkRes) => {
|
||||||
|
if (networkRes && networkRes.ok) {
|
||||||
|
const clone = networkRes.clone();
|
||||||
|
caches.open(CACHE_NAME).then((cache) => cache.put(req, clone));
|
||||||
|
}
|
||||||
|
return networkRes;
|
||||||
|
})
|
||||||
|
.catch(() => null);
|
||||||
|
|
||||||
|
return cached || fetchPromise;
|
||||||
|
})
|
||||||
|
);
|
||||||
|
});
|
||||||
+107
@@ -0,0 +1,107 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
<title>Terms of Service — Aura Ajentic AI Cloud</title>
|
||||||
|
<meta name="description" content="Terms of Service for Aura Ajentic AI Cloud — the rules for using our agentic-AI business platform." />
|
||||||
|
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Ctext y='.9em' font-size='90'%3E%E2%98%81%EF%B8%8F%3C/text%3E%3C/svg%3E" />
|
||||||
|
<style>
|
||||||
|
:root{
|
||||||
|
--bg:#030712; --panel:#0b1220; --panel2:#0f172a; --line:#1e293b;
|
||||||
|
--text:#e2e8f0; --muted:#94a3b8; --dim:#64748b;
|
||||||
|
--accent:#4d7cff; --accent2:#38bdf8; --maxw:820px;
|
||||||
|
}
|
||||||
|
*{box-sizing:border-box}
|
||||||
|
body{margin:0; background:var(--bg); color:var(--text); font-family:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif; line-height:1.7; font-size:16px; background-image:radial-gradient(1200px 600px at 50% -10%, rgba(77,124,255,.10), transparent 70%);}
|
||||||
|
a{color:var(--accent2); text-decoration:none} a:hover{text-decoration:underline}
|
||||||
|
.wrap{max-width:var(--maxw); margin:0 auto; padding:0 20px}
|
||||||
|
header{padding:48px 0 28px; border-bottom:1px solid var(--line)}
|
||||||
|
.brand{display:flex; align-items:center; gap:10px; font-weight:700}
|
||||||
|
.logo{width:30px;height:30px;border-radius:8px;background:linear-gradient(135deg,var(--accent),var(--accent2));display:flex;align-items:center;justify-content:center;font-size:16px}
|
||||||
|
.brand small{display:block; color:var(--muted); font-weight:500; font-size:12px; letter-spacing:.14em; text-transform:uppercase}
|
||||||
|
h1{font-size:clamp(28px,5vw,40px); margin:26px 0 8px; letter-spacing:-.02em; text-wrap:balance}
|
||||||
|
.updated{color:var(--dim); font-size:13px; font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
|
||||||
|
main{padding:36px 0 20px}
|
||||||
|
section{margin:0 0 26px}
|
||||||
|
h2{font-size:20px; margin:30px 0 10px; letter-spacing:-.01em; color:#fff}
|
||||||
|
h2 .num{color:var(--accent); font-family:ui-monospace,monospace; font-size:14px; margin-right:10px}
|
||||||
|
p{color:#cbd5e1; margin:10px 0}
|
||||||
|
ul{margin:10px 0; padding-left:22px} li{margin:7px 0; color:#cbd5e1}
|
||||||
|
strong{color:#fff}
|
||||||
|
.lead{font-size:18px; color:var(--muted)}
|
||||||
|
code{background:var(--panel2); border:1px solid var(--line); border-radius:6px; padding:1px 6px; font-family:ui-monospace,monospace; font-size:.9em}
|
||||||
|
footer{border-top:1px solid var(--line); padding:26px 0 60px; color:var(--dim); font-size:13px}
|
||||||
|
footer a{color:var(--muted)}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="wrap">
|
||||||
|
<header>
|
||||||
|
<div class="brand"><span class="logo">☁️</span><span>Aura Ajentic AI Cloud<small>Agentic AI for business</small></span></div>
|
||||||
|
<h1>Terms of Service</h1>
|
||||||
|
<div class="updated">Last updated: September 21, 2026 · Effective immediately</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<main>
|
||||||
|
<p class="lead">These Terms govern your use of Aura Ajentic AI Cloud (“Aura”, “we”, “us”) — an agentic-AI business platform including our dashboards at <code>auraajenticai.cloud</code> and <code>client.auraajenticai.cloud</code>. By creating an account or connecting a service, you agree to these Terms.</p>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<h2><span class="num">01</span>The service</h2>
|
||||||
|
<p>Aura provides tools for businesses, including an omnichannel sales inbox, CRM, courier logistics, and marketing analytics that you connect to your own third‑party accounts (such as Meta, WooCommerce, and Google Analytics). Features may change, improve, or be discontinued over time.</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<h2><span class="num">02</span>Accounts</h2>
|
||||||
|
<ul>
|
||||||
|
<li>You are responsible for the accuracy of the information you provide and for keeping your login credentials secure.</li>
|
||||||
|
<li>You must have the authority to connect any third‑party account you link to Aura, and to grant Aura access to its data.</li>
|
||||||
|
<li>You are responsible for activity that occurs under your account.</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<h2><span class="num">03</span>Acceptable use</h2>
|
||||||
|
<p>You agree not to misuse the service, including: attempting to access data that is not yours, interfering with or disrupting the platform, reverse‑engineering it, or using it to send unlawful, deceptive, or infringing content. You must comply with the terms of any third‑party service you connect (including Meta, WooCommerce, and Google).</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<h2><span class="num">04</span>Third‑party connections</h2>
|
||||||
|
<p>When you connect a third‑party account, that provider’s own terms and policies continue to apply, and Aura accesses only the data and permissions you grant. Our handling of that data is described in our <a href="/privacy">Privacy Policy</a>. You can disconnect any integration or revoke access at any time.</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<h2><span class="num">05</span>Your data</h2>
|
||||||
|
<p>You retain ownership of your business data. You grant Aura the limited rights needed to operate the features you enable and to display your data back to you. We do not sell your data. See the <a href="/privacy">Privacy Policy</a> for details.</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<h2><span class="num">06</span>Disclaimers</h2>
|
||||||
|
<p>The service is provided “as is” and “as available”, without warranties of any kind to the extent permitted by law. Analytics and AI‑generated outputs are provided for convenience and may contain inaccuracies; you should verify important information before relying on it.</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<h2><span class="num">07</span>Limitation of liability</h2>
|
||||||
|
<p>To the maximum extent permitted by law, Aura will not be liable for any indirect, incidental, special, or consequential damages, or for any loss of profits, data, or business, arising from your use of the service.</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<h2><span class="num">08</span>Termination</h2>
|
||||||
|
<p>You may stop using Aura and delete your account at any time. We may suspend or terminate access if these Terms are violated or if required to protect the service or other users.</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<h2><span class="num">09</span>Changes</h2>
|
||||||
|
<p>We may update these Terms from time to time. Material changes will be reflected by updating the “Last updated” date above. Continued use after changes means you accept the updated Terms.</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<h2><span class="num">10</span>Contact</h2>
|
||||||
|
<p>Questions about these Terms? Email <a href="mailto:ceo@auraajenticai.cloud">ceo@auraajenticai.cloud</a> or visit <a href="https://auraajenticai.cloud" rel="noopener" target="_blank">auraajenticai.cloud</a>.</p>
|
||||||
|
</section>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<footer>© 2026 Aura Ajentic AI Cloud. All rights reserved. · <a href="/privacy">Privacy Policy</a></footer>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
+70
-8
@@ -1,17 +1,79 @@
|
|||||||
{
|
{
|
||||||
"cleanUrls": true,
|
"cleanUrls": false,
|
||||||
"trailingSlash": false,
|
"trailingSlash": false,
|
||||||
"rewrites": [
|
|
||||||
{ "source": "/(.*)", "destination": "/index.html" }
|
|
||||||
],
|
|
||||||
"headers": [
|
"headers": [
|
||||||
|
{
|
||||||
|
"source": "/sw.js",
|
||||||
|
"headers": [
|
||||||
|
{
|
||||||
|
"key": "Cache-Control",
|
||||||
|
"value": "no-cache, no-store, must-revalidate"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "Service-Worker-Allowed",
|
||||||
|
"value": "/"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "/manifest.json",
|
||||||
|
"headers": [
|
||||||
|
{
|
||||||
|
"key": "Content-Type",
|
||||||
|
"value": "application/manifest+json; charset=utf-8"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "Cache-Control",
|
||||||
|
"value": "public, max-age=3600"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"source": "/(.*)",
|
"source": "/(.*)",
|
||||||
"headers": [
|
"headers": [
|
||||||
{ "key": "X-Content-Type-Options", "value": "nosniff" },
|
{
|
||||||
{ "key": "X-Frame-Options", "value": "SAMEORIGIN" },
|
"key": "X-Content-Type-Options",
|
||||||
{ "key": "Referrer-Policy", "value": "strict-origin-when-cross-origin" }
|
"value": "nosniff"
|
||||||
]
|
},
|
||||||
|
{
|
||||||
|
"key": "X-Frame-Options",
|
||||||
|
"value": "SAMEORIGIN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "Referrer-Policy",
|
||||||
|
"value": "strict-origin-when-cross-origin"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"rewrites": [
|
||||||
|
{
|
||||||
|
"source": "/privacy",
|
||||||
|
"destination": "/privacy.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "/privacy.html",
|
||||||
|
"destination": "/privacy.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "/terms",
|
||||||
|
"destination": "/terms.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "/terms.html",
|
||||||
|
"destination": "/terms.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "/manifest.json",
|
||||||
|
"destination": "/manifest.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "/sw.js",
|
||||||
|
"destination": "/sw.js"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "/((?!privacy|terms|manifest\\.json|sw\\.js|.*\\.(?:png|jpg|jpeg|svg|ico|json|js|css|webmanifest)).*)",
|
||||||
|
"destination": "/index.html"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user