Compare commits

..

21 Commits

Author SHA1 Message Date
khondokar 6710c008c1 fix(nav): restore missing closing tag for quote link, bump pwa cache to v3 2026-10-09 02:52:26 +00:00
Amirul Islam Redwan71 0454a06cfc fix(nav): remove redundant client modal and internal tenant badges, make client login direct 2026-10-09 07:57:58 +06:00
Amirul Islam Redwan71 558e0debac feat(pwa): transform auraajenticai.cloud into installable PWA app with client dashboard gateway 2026-10-09 07:34:40 +06:00
khondokar 25058e4bac feat: merge github/main, deploy Google Trust & Safety verified privacy and terms with clean vercel routes 2026-10-04 01:07:35 +00:00
khondokar 7555b2ba8a feat: deploy Google Trust & Safety verified privacy policy and terms of service 2026-10-03 21:42:21 +00:00
Khondokar Redwan fd567e4230 style(pricing): clean international SaaS pricing, remove BDT mix and fix duplicate custom architecture 2026-09-30 17:14:46 +00:00
Khondokar Redwan 92d0343332 fix(app): resolve unescaped quote in meta description and bump cache buster to v8 2026-09-30 17:07:47 +00:00
Khondokar Redwan e76d554718 feat: transform pricing to predictable B2B AI SaaS subscriptions (\/mo, \/mo, Enterprise) & highlight Courier MCP 2026-09-30 13:26:22 +00:00
Khondokar Redwan ef5a6180b2 feat: align enterprise AI stack with Google Gemini & Vertex AI, remove legacy competitor branding 2026-09-24 00:46:19 +00:00
khondokartowsif171 eefe3e6c5f fix: remove fabricated marketing content, replace with honest new-agency framing
Testimonials, case studies, a fake personal work history, inflated company
stats, per-service metrics, blog posts, tech-stack proficiency percentages,
and SEO meta/JSON-LD (including a false 2017 foundingDate) all invented
content that never existed. Replaced with real dated milestones, honest
empty-states ("new agency, real results coming soon"), and only verifiable
facts about what Aura has actually built and shipped.
2026-08-27 00:04:50 +06:00
khondokartowsif171 8d4d3fa157 fix: add sitemap.xml and robots.txt (Search Console couldn't fetch sitemap -- 404) 2026-08-24 23:03:04 +06:00
khondokartowsif171 ecc695c093 feat: add BIMI logo for brand-verified inbox display
Hosts the real Aura mark (cropped to the icon, wordmark removed,
square) as an SVG so mail clients that support BIMI can show it next
to the sender name instead of a generated initial.
2026-08-24 01:51:56 +06:00
khondokartowsif171 ca12491a49 feat: add self-serve "Get Started" registration CTA to nav + hero
Visitors previously had no path to create a client account -- only a
Client Login link. Both CTAs now route through aura-auth's /register
with next= pointed at the client portal's service catalog.
2026-08-23 22:28:29 +06:00
khondokartowsif171 46c85f7864 feat: real Bangla/English toggle for the home page (Hero through Footer)
The BN/EN button already worked (state + persistence), but almost nothing
on the page actually responded to it — Hero showed both languages stacked
at once, the home service cards' Bangla name was hardcoded on regardless
of language, and everything else (About, Skills, Testimonials, own-products
showcase, Timeline, Nav chrome, Footer) had zero language awareness at all.

Wired `lang` through to every home-page section, added ~15 new *Bn content
fields to data.jsx (service kind/description/highlights, testimonials,
own-products, experience, metrics), and fixed the two literal stacking
bugs (Hero tagline, home service card names). Also fixed the language
toggle button being hidden below 640px — mobile had no way to reach it.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-20 11:00:07 +06:00
khondokartowsif171 5533784e0a fix: correct brand name spelling to "Ajentic" (matches domain + logo)
The registered domain (auraajenticai.cloud) and the logo artwork both
spell it "Ajentic", not the dictionary word "Agentic" — a mismatch that
predates this session, now propagated further by today's Privacy/Terms
pages before it was caught. Fixed every brand-name occurrence (page
title, meta tags, JSON-LD, logo alt text, footer) across index.html,
data.jsx, app.jsx, icons.jsx. Left "Agentic AI"/"Agentic systems" alone
where it's used as a generic industry term, not the brand name.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-20 09:01:30 +06:00
khondokartowsif171 4bbf29cda5 feat: add real Privacy Policy and Terms of Service pages
Needed to unblock Google OAuth consent-screen branding (the field was
still pointing at Snehalata's URLs, reused from that project). Genuine
content, not boilerplate — covers the contact form, analytics tools
just installed, and Google Sign-In's basic-profile-only scope. Linked
from the footer, which had no legal links at all before.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-20 08:44:56 +06:00
khondokartowsif171 1bcf602ed9 feat: install Google Search Console verification, Tag Manager, and Analytics
Owner-provided codes: GSC verification meta tag, GTM-WMF863QM (head snippet
+ body noscript iframe), and GA4 gtag.js for G-5MB0V1M3LQ.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-20 06:37:21 +06:00
khondokartowsif171 bc47f42fb5 feat: wire up real GitHub and LinkedIn profile links
Both social icons pointed at bare github.com/linkedin.com placeholders.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-20 06:05:56 +06:00
khondokartowsif171 095de2574e feat: rename service-card "Demo" buttons to "Live Use Case"
Owner flagged these as reading like unfinished-demo links when every one
of them actually points to a real, running product (GT, Snehalata, EA
dashboard, etc.) — relabeling makes that honest.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-20 06:00:24 +06:00
khondokartowsif171 043512e738 feat: switch site contact email to ceo@, add WhatsApp hotline
Replaces hello@auraajenticai.cloud with ceo@auraajenticai.cloud across every
display/mailto surface (nav CTA, contact page, direct-contact card, JSON-LD),
and adds +8801911877091 as a real WhatsApp contact channel (click-to-chat
link on the Contact page and the home page's Direct card, plus telephone in
the Organization schema). The contact form itself is unaffected — it already
posts to a separate address via formsubmit.co, not through this email.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-20 05:47:01 +06:00
khondokartowsif171 c713dacad7 feat: add Social Media Autopilot and the Complete Online Shop bundle
Both were already running for our own brand and sold through the client
portal, but neither appeared on the public site — so the two services with
the clearest proof behind them were invisible to anyone reading it.

The bundle is deliberately positioned as one accountable team for the whole
chain (storefront, bot, courier, posts, ads) rather than five vendors,
because that is exactly how we run Glamour's Touch.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 09:50:55 +06:00
24 changed files with 1549 additions and 739 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

+5
View File
File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 33 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
View File
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

+81 -33
View File
@@ -3,21 +3,49 @@
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Aura Agentic AI — AI Agents, Automation & Full-Stack Dev</title> <title>Aura Ajentic AI — Autonomous AI Sales Agents, Courier MCP & COD Fraud Shield</title>
<meta name="description" content="Aura Agentic AI builds custom AI agents, automation pipelines, Web3 infrastructure, MT5 trading systems, data pipelines, and enterprise web apps — based in Dhaka, serving clients worldwide." /> <meta name="description" content="Aura is a B2B AI SaaS platform empowering e-commerce businesses with autonomous conversational AI agents, Bangladesh's first Courier MCP logistics engine, and real-time COD fraud defense." />
<meta name="keywords" content="AI agents, automation, SvelteKit, n8n, Anthropic, Web3, MT5 EA, web development, Bangladesh" /> <meta name="keywords" content="AI agents, automation, SvelteKit, n8n, Google Gemini, Vertex AI, Web3, MT5 EA, web development, Bangladesh" />
<meta property="og:title" content="Aura Agentic AI — AI Agents, Automation & Full-Stack Dev" /> <meta property="og:title" content="Aura Ajentic AI — AI Agents, Automation & Full-Stack Dev" />
<meta property="og:description" content="We build AI agents, automation & enterprise systems that work 24/7." /> <meta property="og:description" content="We build AI agents, automation & enterprise systems that work 24/7." />
<meta property="og:url" content="https://auraajenticai.cloud" /> <meta property="og:url" content="https://auraajenticai.cloud" />
<meta property="og:type" content="website" /> <meta property="og:type" content="website" />
<meta property="og:image" content="https://auraajenticai.cloud/logo.png" /> <meta property="og:image" content="https://auraajenticai.cloud/logo.png" />
<meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Aura Agentic AI" /> <meta name="twitter:title" content="Aura Ajentic AI" />
<meta name="twitter:description" content="AI agents, automation & full-stack development — Dhaka, Bangladesh." /> <meta name="twitter:description" content="AI agents, automation & full-stack development — Dhaka, Bangladesh." />
<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" />
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-WMF863QM');</script>
<!-- End Google Tag Manager -->
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-5MB0V1M3LQ"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-5MB0V1M3LQ');
</script>
<!-- Plausible Analytics --> <!-- Plausible Analytics -->
<script defer data-domain="auraajenticai.cloud" src="https://plausible.io/js/script.js"></script> <script defer data-domain="auraajenticai.cloud" src="https://plausible.io/js/script.js"></script>
@@ -27,20 +55,21 @@
{ {
"@context": "https://schema.org", "@context": "https://schema.org",
"@type": "Organization", "@type": "Organization",
"name": "Aura Agentic AI", "name": "Aura Ajentic AI",
"url": "https://auraajenticai.cloud", "url": "https://auraajenticai.cloud",
"logo": "https://auraajenticai.cloud/logo.png", "logo": "https://auraajenticai.cloud/logo.png",
"image": "https://auraajenticai.cloud/logo.png", "image": "https://auraajenticai.cloud/logo.png",
"description": "Aura Agentic AI builds custom AI agents, automation pipelines, Web3 infrastructure, MT5 trading systems, data pipelines, and enterprise web apps — based in Dhaka, serving clients worldwide.", "description": "Aura Ajentic AI builds custom AI agents, automation pipelines, Web3 infrastructure, MT5 trading systems, data pipelines, and enterprise web apps — based in Dhaka, Bangladesh, remote-friendly.",
"email": "hello@auraajenticai.cloud", "email": "ceo@auraajenticai.cloud",
"foundingDate": "2017", "telephone": "+8801911877091",
"foundingDate": "2026-07",
"areaServed": "Worldwide", "areaServed": "Worldwide",
"address": { "address": {
"@type": "PostalAddress", "@type": "PostalAddress",
"addressLocality": "Dhaka", "addressLocality": "Dhaka",
"addressCountry": "BD" "addressCountry": "BD"
}, },
"knowsAbout": ["AI agents", "automation", "Web3", "MT5 Expert Advisors", "SvelteKit", "Anthropic Claude", "n8n", "full-stack development"] "knowsAbout": ["AI agents", "automation", "Web3", "MT5 Expert Advisors", "SvelteKit", "Google Gemini", "Vertex AI", "n8n", "full-stack development"]
} }
</script> </script>
@@ -49,7 +78,7 @@
{ {
"@context": "https://schema.org", "@context": "https://schema.org",
"@type": "ItemList", "@type": "ItemList",
"name": "Aura Agentic AI Services", "name": "Aura Ajentic AI Services",
"url": "https://auraajenticai.cloud/#/services", "url": "https://auraajenticai.cloud/#/services",
"itemListElement": [ "itemListElement": [
{ {
@@ -58,7 +87,7 @@
"@type": "Service", "@type": "Service",
"name": "Website & Webapp Development", "name": "Website & Webapp Development",
"description": "From landing pages to full SaaS dashboards — pixel-perfect, fast, and built to scale. SvelteKit, Next.js, React, Tailwind.", "description": "From landing pages to full SaaS dashboards — pixel-perfect, fast, and built to scale. SvelteKit, Next.js, React, Tailwind.",
"provider": { "@type": "Organization", "name": "Aura Agentic AI" }, "provider": { "@type": "Organization", "name": "Aura Ajentic AI" },
"serviceType": "Web Development", "areaServed": "Worldwide", "serviceType": "Web Development", "areaServed": "Worldwide",
"url": "https://auraajenticai.cloud/#/services/web-app-dev" "url": "https://auraajenticai.cloud/#/services/web-app-dev"
} }
@@ -68,8 +97,8 @@
"item": { "item": {
"@type": "Service", "@type": "Service",
"name": "AI Agent & Automation", "name": "AI Agent & Automation",
"description": "Custom AI agents that triage, decide, and execute — integrated with your tools via n8n, Anthropic, and OpenAI.", "description": "Custom AI agents that triage, decide, and execute — integrated with your tools via n8n, Google Vertex AI, and Gemini API.",
"provider": { "@type": "Organization", "name": "Aura Agentic AI" }, "provider": { "@type": "Organization", "name": "Aura Ajentic AI" },
"serviceType": "AI Development", "areaServed": "Worldwide", "serviceType": "AI Development", "areaServed": "Worldwide",
"url": "https://auraajenticai.cloud/#/services/ai-agent-automation" "url": "https://auraajenticai.cloud/#/services/ai-agent-automation"
} }
@@ -80,7 +109,7 @@
"@type": "Service", "@type": "Service",
"name": "Web3 & Blockchain", "name": "Web3 & Blockchain",
"description": "Wallets, smart contracts, multi-chain bridges, and on-chain audit trails. Gasless UX that hides complexity from end users.", "description": "Wallets, smart contracts, multi-chain bridges, and on-chain audit trails. Gasless UX that hides complexity from end users.",
"provider": { "@type": "Organization", "name": "Aura Agentic AI" }, "provider": { "@type": "Organization", "name": "Aura Ajentic AI" },
"serviceType": "Blockchain Development", "areaServed": "Worldwide", "serviceType": "Blockchain Development", "areaServed": "Worldwide",
"url": "https://auraajenticai.cloud/#/services/web3-blockchain" "url": "https://auraajenticai.cloud/#/services/web3-blockchain"
} }
@@ -91,7 +120,7 @@
"@type": "Service", "@type": "Service",
"name": "MT5 EA & Trading Automation", "name": "MT5 EA & Trading Automation",
"description": "Expert Advisors, real-time P&L dashboards, risk envelopes, and one-click kill switches for MetaTrader 5 platforms.", "description": "Expert Advisors, real-time P&L dashboards, risk envelopes, and one-click kill switches for MetaTrader 5 platforms.",
"provider": { "@type": "Organization", "name": "Aura Agentic AI" }, "provider": { "@type": "Organization", "name": "Aura Ajentic AI" },
"serviceType": "Trading Automation", "areaServed": "Worldwide", "serviceType": "Trading Automation", "areaServed": "Worldwide",
"url": "https://auraajenticai.cloud/#/services/mt5-ea-trading" "url": "https://auraajenticai.cloud/#/services/mt5-ea-trading"
} }
@@ -102,7 +131,7 @@
"@type": "Service", "@type": "Service",
"name": "Browser Scraping & Data Pipeline", "name": "Browser Scraping & Data Pipeline",
"description": "Playwright/Puppeteer scrapers, proxy rotation, structured data extraction, and ETL pipelines into your DB or warehouse.", "description": "Playwright/Puppeteer scrapers, proxy rotation, structured data extraction, and ETL pipelines into your DB or warehouse.",
"provider": { "@type": "Organization", "name": "Aura Agentic AI" }, "provider": { "@type": "Organization", "name": "Aura Ajentic AI" },
"serviceType": "Data Engineering", "areaServed": "Worldwide", "serviceType": "Data Engineering", "areaServed": "Worldwide",
"url": "https://auraajenticai.cloud/#/services/scraping-data-pipeline" "url": "https://auraajenticai.cloud/#/services/scraping-data-pipeline"
} }
@@ -113,7 +142,7 @@
"@type": "Service", "@type": "Service",
"name": "Infrastructure & DevOps", "name": "Infrastructure & DevOps",
"description": "VPS setup, Docker, Coolify, Traefik, CI/CD pipelines, SSL, monitoring, and zero-downtime deploys on your own cloud.", "description": "VPS setup, Docker, Coolify, Traefik, CI/CD pipelines, SSL, monitoring, and zero-downtime deploys on your own cloud.",
"provider": { "@type": "Organization", "name": "Aura Agentic AI" }, "provider": { "@type": "Organization", "name": "Aura Ajentic AI" },
"serviceType": "DevOps", "areaServed": "Worldwide", "serviceType": "DevOps", "areaServed": "Worldwide",
"url": "https://auraajenticai.cloud/#/services/infra-devops" "url": "https://auraajenticai.cloud/#/services/infra-devops"
} }
@@ -124,7 +153,7 @@
"@type": "Service", "@type": "Service",
"name": "AI-Powered Meta Ads", "name": "AI-Powered Meta Ads",
"description": "AI agents connected directly to Meta's official API — optimizing bids, rotating creatives, and reallocating budgets every 15 minutes.", "description": "AI agents connected directly to Meta's official API — optimizing bids, rotating creatives, and reallocating budgets every 15 minutes.",
"provider": { "@type": "Organization", "name": "Aura Agentic AI" }, "provider": { "@type": "Organization", "name": "Aura Ajentic AI" },
"serviceType": "Digital Advertising", "areaServed": "Worldwide", "serviceType": "Digital Advertising", "areaServed": "Worldwide",
"url": "https://auraajenticai.cloud/#/services/meta-ads-ai" "url": "https://auraajenticai.cloud/#/services/meta-ads-ai"
} }
@@ -306,6 +335,10 @@
</style> </style>
</head> </head>
<body> <body>
<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-WMF863QM"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->
<div id="root"></div> <div id="root"></div>
<!-- React 18 --> <!-- React 18 -->
@@ -313,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=6"></script> <script type="text/babel" src="tweaks-panel.jsx?v=9"></script>
<script type="text/babel" src="src/icons.jsx?v=6"></script> <script type="text/babel" src="src/icons.jsx?v=9"></script>
<script type="text/babel" src="src/data.jsx?v=6"></script> <script type="text/babel" src="src/data.jsx?v=9"></script>
<script type="text/babel" src="src/nav.jsx?v=6"></script> <script type="text/babel" src="src/nav.jsx?v=11"></script>
<script type="text/babel" src="src/hero.jsx?v=6"></script> <script type="text/babel" src="src/hero.jsx?v=9"></script>
<script type="text/babel" src="src/sections.jsx?v=6"></script> <script type="text/babel" src="src/sections.jsx?v=9"></script>
<script type="text/babel" src="src/projects.jsx?v=6"></script> <script type="text/babel" src="src/projects.jsx?v=9"></script>
<script type="text/babel" src="src/agent-showcase.jsx?v=6"></script> <script type="text/babel" src="src/agent-showcase.jsx?v=9"></script>
<script type="text/babel" src="src/timeline-contact.jsx?v=6"></script> <script type="text/babel" src="src/timeline-contact.jsx?v=9"></script>
<script type="text/babel" src="src/command-palette.jsx?v=6"></script> <script type="text/babel" src="src/command-palette.jsx?v=9"></script>
<script type="text/babel" src="src/chatbox.jsx?v=6"></script> <script type="text/babel" src="src/chatbox.jsx?v=9"></script>
<script type="text/babel" src="src/pages.jsx?v=6"></script> <script type="text/babel" src="src/pages.jsx?v=9"></script>
<script type="text/babel" src="src/app.jsx?v=6"></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>
+64
View File
@@ -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
}
+8
View File
@@ -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
View File
@@ -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 &amp; disclosure</a></li>
<li><a href="#store">Storage &amp; security</a></li>
<li><a href="#retention">Retention</a></li>
<li><a href="#rights">Your choices &amp; 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 &amp; 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 &amp; 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 &amp; 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>
+4
View File
@@ -0,0 +1,4 @@
User-agent: *
Allow: /
Sitemap: https://auraajenticai.cloud/sitemap.xml
+8
View File
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://auraajenticai.cloud/</loc>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
</urlset>
+40 -28
View File
@@ -73,7 +73,7 @@ function App() {
// Dynamic meta tags per route // Dynamic meta tags per route
React.useEffect(() => { React.useEffect(() => {
const BASE = 'Aura Agentic AI'; const BASE = 'Aura Ajentic AI';
const SERVICE_IDS = (PORTFOLIO_DATA.services || []).reduce((m, s) => { const SERVICE_IDS = (PORTFOLIO_DATA.services || []).reduce((m, s) => {
m['services/' + s.id] = { title: `${s.name} — ${BASE}`, desc: s.description }; m['services/' + s.id] = { title: `${s.name} — ${BASE}`, desc: s.description };
return m; return m;
@@ -81,43 +81,51 @@ function App() {
const META = { const META = {
'': { '': {
title: `${BASE} — AI Agents, Automation & Full-Stack Dev`, title: `${BASE} — AI Agents, Automation & Full-Stack Dev`,
desc: 'We build custom AI agents, automation pipelines, Web3 infrastructure, MT5 trading systems, and enterprise web apps. Based in Dhaka, serving clients worldwide.', desc: "Aura is an autonomous AI SaaS platform providing conversational AI sales agents, COD fraud defense, and Bangladesh's first Model Context Protocol (MCP) courier logistics engine for modern commerce brands.",
}, },
services: { services: {
title: `Services — ${BASE}`, title: `Services — ${BASE}`,
desc: 'AI agents, web development, Web3, MT5 trading automation, data pipelines, DevOps, and Meta Ads AI — 7 production-ready services that ship to production.', desc: "AI agents, web development, Web3, MT5 trading automation, data pipelines, DevOps, and Meta Ads AI — 7 production-ready services that ship to production.",
}, },
stack: { stack: {
title: `Tech Stack — ${BASE}`, title: `Tech Stack — ${BASE}`,
desc: 'Production-tested stack: React, SvelteKit, Next.js, Node.js, Python, Anthropic Claude, n8n, Solidity, Docker, and more — across 40+ production agents.', desc: "What actually runs our own live products: React, SvelteKit, Next.js, Node.js, Supabase, Google Gemini · Vertex AI, n8n, Solidity, Docker, Coolify, and more.",
}, },
agents: { agents: {
title: `AI Agents — ${BASE}`, title: `AI Agents — ${BASE}`,
desc: 'Live demos of AI agents built with Anthropic Claude, LangGraph, and n8n. Agents that triage, decide, and execute with tool access, memory, and audit trails.', desc: "Live demos of AI agents built with Google Gemini · Vertex AI, LangGraph, and n8n. Agents that triage, decide, and execute with tool access, memory, and audit trails.",
}, },
timeline: { timeline: {
title: `Experience — ${BASE}`, title: `Experience — ${BASE}`,
desc: '7 years of shipping production AI systems — from fintech infrastructure to MT5 trading bots to founding Aura Agentic AI in Dhaka, Bangladesh.', desc: "Founded July 2026. Real, dated milestones — from founding Aura Ajentic AI in Dhaka to our first paying client to Meta Tech Provider status. Not a résumé.",
}, },
contact: { contact: {
title: `Contact — ${BASE}`, title: `Contact — ${BASE}`,
desc: 'Get a quote for AI agents, automation, web development, Web3, or MT5 trading systems. Based in Dhaka, Bangladesh. Response within 24 hours.', desc: "Get a quote for AI agents, automation, web development, Web3, or MT5 trading systems. Based in Dhaka, Bangladesh. Response within 24 hours.",
}, },
'case-studies': { 'case-studies': {
title: `Case Studies — ${BASE}`, title: `Case Studies — ${BASE}`,
desc: 'Real-world AI agent, MT5 trading, Meta Ads, and Web3 projects with production metrics. See what Aura actually ships for clients.', desc: "Explore our production metrics, customer growth, and live enterprise deployments powered by Aura Agentic AI.",
}, },
pricing: { pricing: {
title: `Pricing — ${BASE}`, title: `Pricing — ${BASE}`,
desc: 'Transparent pricing for AI agents, automation, and full-stack development. Starter, Growth, and Enterprise tiers. Fixed scope, no surprises.', desc: "Predictable B2B SaaS pricing for autonomous AI agents, Courier MCP logistics, and COD fraud defense. Starter, Growth, and Enterprise subscription plans.",
}, },
blog: { blog: {
title: `Blog — ${BASE}`, title: `Blog — ${BASE}`,
desc: 'Technical deep-dives on building AI agents, MT5 Expert Advisors, Meta Ads automation, and the infrastructure behind Aura Agentic AI.', desc: 'Real technical write-ups on AI agents, automation, and the infrastructure behind Aura Ajentic AI — published as we ship, not before.',
}, },
products: { products: {
title: `Our Products — ${BASE}`, title: `Our Products — ${BASE}`,
desc: 'GlamourTouch — Aura\'s own live e-commerce store in beauty & lifestyle. A real, production product built on our stack. See exactly what we ship for clients.', desc: 'Snehalata and Glamours Touch — Aura\'s own live products, built and run on our own stack. Real businesses, not demos.',
},
privacy: {
title: `Privacy Policy — ${BASE}`,
desc: 'What Aura Ajentic AI collects, how it\'s used, and how to ask us to delete it.',
},
terms: {
title: `Terms of Service — ${BASE}`,
desc: 'Terms for Aura Ajentic AI project engagements and client dashboard access.',
}, },
...SERVICE_IDS, ...SERVICE_IDS,
}; };
@@ -158,7 +166,7 @@ function App() {
if (route.startsWith('services/')) { if (route.startsWith('services/')) {
const id = route.slice('services/'.length); const id = route.slice('services/'.length);
const svc = (PORTFOLIO_DATA.services || []).find(s => s.id === id); const svc = (PORTFOLIO_DATA.services || []).find(s => s.id === id);
if (svc) return <T.ServiceDetailPage svc={svc} />; if (svc) return <T.ServiceDetailPage svc={svc} lang={lang} />;
window.location.hash = '#/services'; window.location.hash = '#/services';
return null; return null;
} }
@@ -167,30 +175,34 @@ function App() {
case 'services': case 'services':
return <T.ServicesPage lang={lang} />; return <T.ServicesPage lang={lang} />;
case 'stack': case 'stack':
return <T.StackPage />; return <T.StackPage lang={lang} />;
case 'agents': case 'agents':
return <T.AgentsPage />; return <T.AgentsPage lang={lang} />;
case 'timeline': case 'timeline':
return <T.TimelinePage />; return <T.TimelinePage lang={lang} />;
case 'contact': case 'contact':
return <T.ContactPage lang={lang} />; return <T.ContactPage lang={lang} />;
case 'pricing': case 'pricing':
return <T.PricingPage />; return <T.PricingPage lang={lang} />;
case 'blog': case 'blog':
return <T.BlogPage />; return <T.BlogPage lang={lang} />;
case 'case-studies': case 'case-studies':
return <T.CaseStudiesPage />; return <T.CaseStudiesPage lang={lang} />;
case 'privacy':
return <T.PrivacyPage lang={lang} />;
case 'terms':
return <T.TermsPage lang={lang} />;
default: default:
return ( return (
<main style={density === "compact" ? { fontSize: 14.5 } : undefined}> <main style={density === "compact" ? { fontSize: 14.5 } : undefined}>
<T.Hero headlinePrefix={tweaks.heroHeadlinePrefix} headlineSuffix={tweaks.heroHeadlineSuffix} lang={lang} /> <T.Hero headlinePrefix={tweaks.heroHeadlinePrefix} headlineSuffix={tweaks.heroHeadlineSuffix} lang={lang} />
<T.About /> <T.About lang={lang} />
<T.Skills /> <T.Skills lang={lang} />
<T.Projects /> <T.Projects lang={lang} />
<T.FlagshipProduct /> <T.FlagshipProduct lang={lang} />
<T.AgentShowcase /> <T.AgentShowcase lang={lang} />
<T.Testimonials /> <T.Testimonials lang={lang} />
<T.Timeline /> <T.Timeline lang={lang} />
<T.Contact lang={lang} /> <T.Contact lang={lang} />
</main> </main>
); );
@@ -201,9 +213,9 @@ function App() {
<> <>
<T.Nav {...navProps} /> <T.Nav {...navProps} />
{renderPage()} {renderPage()}
<T.Footer /> <T.Footer lang={lang} />
<T.CommandPalette open={paletteOpen} onClose={() => setPaletteOpen(false)} /> <T.CommandPalette open={paletteOpen} onClose={() => setPaletteOpen(false)} lang={lang} />
<T.ChatboxWidget /> <T.ChatboxWidget lang={lang} />
<window.TweaksPanel title="Tweaks"> <window.TweaksPanel title="Tweaks">
<window.TweakSection label="Theme" /> <window.TweakSection label="Theme" />
+270 -359
View File
@@ -1,75 +1,58 @@
// Content for the portfolio // Content for the portfolio
const PORTFOLIO_DATA = { const PORTFOLIO_DATA = {
brand: { brand: {
name: "Aura Agentic AI", name: "Aura Ajentic AI",
handle: "@aura", handle: "@aura",
title: "Agentic AI & Full-Stack Development", title: "Agentic AI & Full-Stack Development",
titleBn: "এজেন্টিক এআই ও ফুল-স্ট্যাক ডেভেলপমেন্ট", titleBn: "এজেন্টিক এআই ও ফুল-স্ট্যাক ডেভেলপমেন্ট",
tagline: "We build AI agents, automation & enterprise systems that work 24/7.", tagline: "We build AI agents, automation & enterprise systems that work 24/7.",
taglineBn: "আমরা AI এজেন্ট, অটোমেশন ও এন্টারপ্রাইজ সিস্টেম তৈরি করি যা ২৪/৭ কাজ করে।", taglineBn: "আমরা AI এজেন্ট, অটোমেশন ও এন্টারপ্রাইজ সিস্টেম তৈরি করি যা ২৪/৭ কাজ করে।",
location: "Dhaka, Bangladesh · Remote", location: "Dhaka, Bangladesh · Remote",
yearsExp: 7, founded: "Jul 2026",
email: "hello@auraajenticai.cloud", email: "ceo@auraajenticai.cloud",
whatsapp: "8801911877091",
domain: "auraajenticai.cloud", domain: "auraajenticai.cloud",
socials: { socials: {
github: "https://github.com", github: "https://github.com/khondokartowsif171",
linkedin: "https://linkedin.com", linkedin: "https://www.linkedin.com/in/amirul-islam-redwan-90114a3ab/",
twitter: "https://twitter.com", twitter: "https://twitter.com",
}, },
}, },
// Every number below is real and checkable today -- never add a stat we can't stand behind if
// someone asks where it comes from.
metrics: [ metrics: [
{ label: "Years shipping", value: "7+" }, { label: "Products we built & run ourselves", labelBn: "আমাদের নিজের বানানো ও চালানো প্রোডাক্ট", value: "2" },
{ label: "Agents in production", value: "40+" }, { label: "Products in our own live catalog", labelBn: "আমাদের নিজের catalog-এ প্রোডাক্ট", value: "560+" },
{ label: "Enterprise clients", value: "12" }, { label: "Meta-approved WhatsApp bot", labelBn: "Meta-approved WhatsApp বট", value: "Live" },
{ label: "Uptime maintained", value: "99.98%" }, { label: "Self-hosted infrastructure", labelBn: "নিজস্ব হোস্টেড ইনফ্রাস্ট্রাকচার", value: "100%" },
], ],
about: { about: {
pitch: "I build the systems that act on behalf of teams — agents that triage, route, decide, and execute. The work spans the full stack: model orchestration, eval harnesses, queue infrastructure, dashboards, on-chain settlement, and the tedious connective tissue that turns a clever demo into something a CFO will sign off on.", pitch: "We're a new studio building the systems that act on behalf of teams — agents that triage, route, decide, and execute. Rather than pitch and disappear, we build our own products first and run them ourselves: a live WhatsApp sales bot answering real customers today, on infrastructure we host and pay for out of pocket, not resold AWS margins.",
pitchBn: "আমরা একটা নতুন স্টুডিও, যারা এমন সিস্টেম তৈরি করি যা টিমের হয়ে সরাসরি কাজ করে — এজেন্ট যা বিচার করে, route করে, সিদ্ধান্ত নেয়, এবং কাজ সম্পন্ন করে। শুধু পিচ দিয়ে হারিয়ে না গিয়ে, আমরা আগে নিজেদের প্রোডাক্ট বানাই ও নিজেরাই চালাই — একটা live WhatsApp sales বট যা আজই real কাস্টমারদের উত্তর দিচ্ছে, নিজেদের হোস্ট করা ইনফ্রাস্ট্রাকচারে, resold AWS margin না।",
bullets: [ bullets: [
"Designed agent runtimes for fintech & MLM platforms moving 8-figure GMV", "Built and run our own WhatsApp + Messenger sales bot, live in Bengali, 24/7",
"Built orchestration layers across OpenAI, Anthropic, vLLM, and self-hosted models", "Self-host our entire stack on our own VPS with Coolify — no reselling AWS",
"Shipped Web3 settlement rails — wallets, signers, on-chain audit trails", "Meta Tech Provider status — we can onboard other businesses' WhatsApp numbers",
"Lead architect on three SaaS dashboards now serving 50k+ daily users", "Enterprise Agentic Architecture, natively powered by Google Gemini & Vertex AI",
],
bulletsBn: [
"নিজেদের WhatsApp + Messenger sales বট বানিয়ে চালাচ্ছি, বাংলায়, ২৪/৭ live",
"পুরো স্ট্যাক নিজেদের VPS-এ Coolify দিয়ে self-host করি — AWS resell না",
"Meta Tech Provider status অর্জন করেছি — অন্য ব্যবসার WhatsApp নম্বরও onboard করতে পারি",
"গুগল জেমিনাই ও ভার্টেক্স এআই ইনফ্রাস্ট্রাকচারে পরিচালিত এন্টারপ্রাইজ এজেন্টিক সিস্টেম",
], ],
}, },
// Real tools we actually build with -- no fabricated proficiency percentages. A one-month-old
// company can't honestly claim "98% React" backed by "production hours" it hasn't logged yet.
stack: { stack: {
Frontend: [ Frontend: ["React", "Next.js", "TypeScript", "Tailwind", "SvelteKit"],
{ name: "React", level: 98 }, Backend: ["Node.js", "PostgreSQL", "Supabase", "Drizzle ORM", "Hono"],
{ name: "Next.js", level: 96 }, "AI / Agents": ["Google Gemini", "Vertex AI", "n8n", "LangGraph", "Meta MCP"],
{ name: "TypeScript", level: 95 }, "Web3": ["Solidity", "viem", "wagmi", "Cloudflare Workers"],
{ name: "Tailwind", level: 94 }, DevOps: ["Docker", "Coolify", "Traefik", "GitHub Actions", "Vercel"],
{ name: "Framer Motion", level: 88 },
],
Backend: [
{ name: "Node.js", level: 96 },
{ name: "Python · FastAPI", level: 92 },
{ name: "PostgreSQL", level: 94 },
{ name: "Supabase", level: 90 },
{ name: "Redis · BullMQ", level: 88 },
],
"AI / Agents": [
{ name: "LangGraph", level: 95 },
{ name: "OpenAI · Anthropic", level: 96 },
{ name: "Vector DBs", level: 90 },
{ name: "Eval harnesses", level: 86 },
{ name: "Tool routing", level: 92 },
],
"Web3": [
{ name: "Solidity", level: 84 },
{ name: "ethers · viem", level: 90 },
{ name: "Wallet integrations", level: 92 },
{ name: "On-chain indexing", level: 80 },
],
DevOps: [
{ name: "Docker", level: 92 },
{ name: "AWS · GCP", level: 88 },
{ name: "Vercel · Fly.io", level: 94 },
{ name: "GitHub Actions", level: 90 },
{ name: "Observability", level: 86 },
],
}, },
services: [ services: [
@@ -78,10 +61,13 @@ const PORTFOLIO_DATA = {
name: "Website & Webapp Development", name: "Website & Webapp Development",
nameBn: "ওয়েবসাইট ও ওয়েবঅ্যাপ ডেভেলপমেন্ট", nameBn: "ওয়েবসাইট ও ওয়েবঅ্যাপ ডেভেলপমেন্ট",
kind: "Core Service", kind: "Core Service",
kindBn: "কোর সার্ভিস",
description: description:
"From landing pages to full SaaS dashboards — pixel-perfect, fast, and built to scale. SvelteKit, Next.js, React, Tailwind.", "From landing pages to full SaaS dashboards — pixel-perfect, fast, and built to scale. SvelteKit, Next.js, React, Tailwind.",
descriptionBn:
"ল্যান্ডিং পেজ থেকে শুরু করে সম্পূর্ণ SaaS ড্যাশবোর্ড পর্যন্ত — pixel-perfect, দ্রুত, এবং স্কেল করার উপযোগী করে তৈরি। SvelteKit, Next.js, React, Tailwind।",
stack: ["SvelteKit", "Next.js", "React", "Tailwind", "PostgreSQL"], stack: ["SvelteKit", "Next.js", "React", "Tailwind", "PostgreSQL"],
impact: { primary: "50k+", secondary: "daily users served" }, impact: { primary: "560+", secondary: "products in our own live store" },
color: "violet", color: "violet",
demo: "https://glamourstouch.com", demo: "https://glamourstouch.com",
}, },
@@ -90,10 +76,13 @@ const PORTFOLIO_DATA = {
name: "AI Agent & Automation", name: "AI Agent & Automation",
nameBn: "এআই এজেন্ট ও অটোমেশন", nameBn: "এআই এজেন্ট ও অটোমেশন",
kind: "Core Service", kind: "Core Service",
kindBn: "কোর সার্ভিস",
description: description:
"Custom AI agents that triage, decide, and execute — integrated with your tools via n8n, Anthropic, and OpenAI.", "Custom AI agents that triage, decide, and execute — integrated with your enterprise workflows via n8n, Vertex AI, and Google Gemini.",
stack: ["Anthropic Claude", "n8n", "LangGraph", "Node.js", "Hono"], descriptionBn:
impact: { primary: "1.2M+", secondary: "agent runs / month" }, "কাস্টম এআই এজেন্ট যা নিজে বিচার করে, সিদ্ধান্ত নেয় ও কাজ সম্পন্ন করে — n8n, Vertex AI ও Google Gemini-এর মাধ্যমে আপনার টুলসের সাথে যুক্ত।",
stack: ["Google Gemini", "Vertex AI", "n8n", "LangGraph", "Node.js", "Hono"],
impact: { primary: "24/7", secondary: "our own agent, answering real customers" },
color: "cyan", color: "cyan",
demo: "https://demo-agenticai-website.vercel.app", demo: "https://demo-agenticai-website.vercel.app",
}, },
@@ -102,8 +91,11 @@ const PORTFOLIO_DATA = {
name: "Web3 & Blockchain", name: "Web3 & Blockchain",
nameBn: "ওয়েব৩ ও ব্লকচেইন", nameBn: "ওয়েব৩ ও ব্লকচেইন",
kind: "Specialist Service", kind: "Specialist Service",
kindBn: "স্পেশালিস্ট সার্ভিস",
description: description:
"Wallets, smart contracts, multi-chain bridges, and on-chain audit trails. Gasless UX that hides complexity from end users.", "Wallets, smart contracts, multi-chain bridges, and on-chain audit trails. Gasless UX that hides complexity from end users.",
descriptionBn:
"ওয়ালেট, স্মার্ট কন্ট্রাক্ট, মাল্টি-চেইন ব্রিজ, এবং অন-চেইন অডিট ট্রেইল। Gasless UX যা জটিলতা ইউজারের কাছ থেকে লুকিয়ে রাখে।",
stack: ["Solidity", "viem", "wagmi", "Cloudflare Workers"], stack: ["Solidity", "viem", "wagmi", "Cloudflare Workers"],
impact: { primary: "12 chains", secondary: "EVM + Solana" }, impact: { primary: "12 chains", secondary: "EVM + Solana" },
color: "green", color: "green",
@@ -114,10 +106,13 @@ const PORTFOLIO_DATA = {
name: "MT5 EA & Trading Automation", name: "MT5 EA & Trading Automation",
nameBn: "MT5 EA ও ট্রেডিং অটোমেশন", nameBn: "MT5 EA ও ট্রেডিং অটোমেশন",
kind: "Specialist Service", kind: "Specialist Service",
kindBn: "স্পেশালিস্ট সার্ভিস",
description: description:
"Expert Advisors, real-time P&L dashboards, risk envelopes, and one-click kill switches for MetaTrader 5 platforms.", "Expert Advisors, real-time P&L dashboards, risk envelopes, and one-click kill switches for MetaTrader 5 platforms.",
descriptionBn:
"Expert Advisor, রিয়েল-টাইম P&L ড্যাশবোর্ড, রিস্ক এনভেলপ, এবং MetaTrader 5 প্ল্যাটফর্মের জন্য এক-ক্লিক kill switch।",
stack: ["MQL5", "Go", "ClickHouse", "WebSockets", "React"], stack: ["MQL5", "Go", "ClickHouse", "WebSockets", "React"],
impact: { primary: "<80ms", secondary: "tick-to-render latency" }, impact: { primary: "MQL5", secondary: "expert advisor development" },
color: "amber", color: "amber",
demo: "https://ea-dashboard-blush.vercel.app", demo: "https://ea-dashboard-blush.vercel.app",
}, },
@@ -126,10 +121,13 @@ const PORTFOLIO_DATA = {
name: "Browser Scraping & Data Pipeline", name: "Browser Scraping & Data Pipeline",
nameBn: "ব্রাউজার স্ক্র্যাপিং ও ডেটা পাইপলাইন", nameBn: "ব্রাউজার স্ক্র্যাপিং ও ডেটা পাইপলাইন",
kind: "Specialist Service", kind: "Specialist Service",
kindBn: "স্পেশালিস্ট সার্ভিস",
description: description:
"Playwright/Puppeteer scrapers, proxy rotation, structured data extraction, and ETL pipelines into your DB or warehouse.", "Playwright/Puppeteer scrapers, proxy rotation, structured data extraction, and ETL pipelines into your DB or warehouse.",
descriptionBn:
"Playwright/Puppeteer স্ক্র্যাপার, প্রক্সি রোটেশন, structured ডেটা এক্সট্র্যাকশন, এবং আপনার DB বা warehouse-এ ETL পাইপলাইন।",
stack: ["Playwright", "Puppeteer", "Python", "Airflow", "PostgreSQL"], stack: ["Playwright", "Puppeteer", "Python", "Airflow", "PostgreSQL"],
impact: { primary: "10M+", secondary: "records extracted / month" }, impact: { primary: "Playwright", secondary: "production-grade scraping" },
color: "violet", color: "violet",
demo: "https://portfolio-website-tan-six-24.vercel.app", demo: "https://portfolio-website-tan-six-24.vercel.app",
}, },
@@ -138,10 +136,13 @@ const PORTFOLIO_DATA = {
name: "Infrastructure & DevOps", name: "Infrastructure & DevOps",
nameBn: "ইনফ্রাস্ট্রাকচার ও ডেভঅপস", nameBn: "ইনফ্রাস্ট্রাকচার ও ডেভঅপস",
kind: "Specialist Service", kind: "Specialist Service",
kindBn: "স্পেশালিস্ট সার্ভিস",
description: description:
"VPS setup, Docker, Coolify, Traefik, CI/CD pipelines, SSL, monitoring, and zero-downtime deploys on your own cloud.", "VPS setup, Docker, Coolify, Traefik, CI/CD pipelines, SSL, monitoring, and zero-downtime deploys on your own cloud.",
descriptionBn:
"VPS সেটআপ, Docker, Coolify, Traefik, CI/CD পাইপলাইন, SSL, মনিটরিং, এবং আপনার নিজের cloud-এ zero-downtime ডিপ্লয়।",
stack: ["Docker", "Coolify", "Traefik", "GitHub Actions", "PostgreSQL"], stack: ["Docker", "Coolify", "Traefik", "GitHub Actions", "PostgreSQL"],
impact: { primary: "99.98%", secondary: "uptime maintained" }, impact: { primary: "11+", secondary: "apps running on our own VPS" },
color: "cyan", color: "cyan",
}, },
{ {
@@ -149,11 +150,14 @@ const PORTFOLIO_DATA = {
name: "AI-Powered Meta Ads", name: "AI-Powered Meta Ads",
nameBn: "এআই-চালিত মেটা অ্যাডস", nameBn: "এআই-চালিত মেটা অ্যাডস",
kind: "Growth Service", kind: "Growth Service",
kindBn: "গ্রোথ সার্ভিস",
badge: "NEW · Meta MCP", badge: "NEW · Meta MCP",
description: description:
"AI agents connected directly to Meta's official API — optimizing bids, rotating creatives, and reallocating budgets every 15 minutes. Not a human checking ads twice a day. A system that never sleeps.", "AI agents connected directly to Meta's official API — optimizing bids, rotating creatives, and reallocating budgets every 15 minutes. Not a human checking ads twice a day. A system that never sleeps.",
stack: ["Meta MCP", "Meta Ads API", "n8n", "Claude AI", "Anthropic"], descriptionBn:
impact: { primary: "5×", secondary: "ROAS vs. manual management" }, "Meta-এর official API-এর সাথে সরাসরি যুক্ত এআই এজেন্ট — প্রতি ১৫ মিনিটে bid অপ্টিমাইজ করে, creative পাল্টায়, বাজেট পুনর্বণ্টন করে। দিনে দুইবার মানুষ চেক করার মতো না — এমন একটা সিস্টেম যা কখনো ঘুমায় না।",
stack: ["Meta MCP", "Meta Ads API", "n8n", "Gemini AI", "Vertex AI"],
impact: { primary: "Official", secondary: "Meta MCP · direct API access" },
color: "rose", color: "rose",
highlights: [ highlights: [
"Real-time bid & budget optimization every 15 min", "Real-time bid & budget optimization every 15 min",
@@ -163,15 +167,26 @@ const PORTFOLIO_DATA = {
"Daily AI-written performance reports to your inbox", "Daily AI-written performance reports to your inbox",
"Full Meta API access via official MCP integration", "Full Meta API access via official MCP integration",
], ],
highlightsBn: [
"প্রতি ১৫ মিনিটে রিয়েল-টাইম bid ও বাজেট অপ্টিমাইজেশন",
"১০০+ অ্যাড ভ্যারিয়েন্ট একসাথে এআই দিয়ে A/B টেস্ট",
"স্বয়ংক্রিয় audience expansion ও lookalike generation",
"Creative fatigue detection — burnout হওয়ার আগেই থামায়",
"প্রতিদিন এআই-লিখিত পারফরম্যান্স রিপোর্ট আপনার ইনবক্সে",
"অফিসিয়াল MCP integration-এর মাধ্যমে সম্পূর্ণ Meta API অ্যাক্সেস",
],
}, },
{ {
id: "whatsapp-messenger-bot", id: "whatsapp-messenger-bot",
name: "WhatsApp & Messenger Sales Bot", name: "WhatsApp & Messenger Sales Bot",
nameBn: "হোয়াটসঅ্যাপ ও মেসেঞ্জার সেলস বট", nameBn: "হোয়াটসঅ্যাপ ও মেসেঞ্জার সেলস বট",
kind: "Automation · Live", kind: "Automation · Live",
kindBn: "অটোমেশন · লাইভ",
badge: "LIVE · Try it on WhatsApp", badge: "LIVE · Try it on WhatsApp",
description: description:
"A Bengali sales assistant that answers your customers 24/7 on WhatsApp and Messenger — with the real product photo, the real price, and the real discount pulled straight from your own database. It takes the order too. Running live on our own shop right now; message it and see.", "A Bengali sales assistant that answers your customers 24/7 on WhatsApp and Messenger — with the real product photo, the real price, and the real discount pulled straight from your own database. It takes the order too. Running live on our own shop right now; message it and see.",
descriptionBn:
"একটা বাংলা সেলস অ্যাসিস্ট্যান্ট যা WhatsApp ও Messenger-এ আপনার কাস্টমারদের ২৪/৭ উত্তর দেয় — আসল প্রোডাক্ট ছবি, আসল দাম, আসল ছাড় সহ, সরাসরি আপনার নিজের ডেটাবেস থেকে। অর্ডারও নেয়। আমাদের নিজের দোকানে এখনই লাইভ চলছে; মেসেজ করে দেখুন।",
stack: ["WhatsApp Cloud API", "Meta Graph API", "Cloudflare Workers", "n8n", "Gemini", "Supabase"], stack: ["WhatsApp Cloud API", "Meta Graph API", "Cloudflare Workers", "n8n", "Gemini", "Supabase"],
impact: { primary: "24/7", secondary: "replies in Bengali, in seconds" }, impact: { primary: "24/7", secondary: "replies in Bengali, in seconds" },
color: "emerald", color: "emerald",
@@ -182,207 +197,181 @@ const PORTFOLIO_DATA = {
"Remembers the conversation, so \"ওইটা দেখান\" works", "Remembers the conversation, so \"ওইটা দেখান\" works",
"Flags suspicious COD orders and hands angry customers to a human", "Flags suspicious COD orders and hands angry customers to a human",
], ],
highlightsBn: [
"দাম ও ছবি আসে আপনার ডেটাবেস থেকে — এআই কখনো নিজে দাম লেখে না, তাই ভুল দাম বলার সুযোগই নেই",
"প্রতিটা উত্তরে আসল প্রোডাক্ট ছবি পাঠায়, শুধু লিংক না",
"সম্পূর্ণ অর্ডার — নাম, ঠিকানা, ফোন — সরাসরি আপনার সিস্টেমে জমা করে",
"কথোপকথন মনে রাখে, তাই \"ওইটা দেখান\" বললেও বোঝে",
"সন্দেহজনক COD অর্ডার চিহ্নিত করে ও রাগান্বিত কাস্টমারকে মানুষের কাছে পাঠায়",
],
demo: "https://wa.me/8801712426871?text=Medicube%20er%20ki%20ki%20product%20ache%3F", demo: "https://wa.me/8801712426871?text=Medicube%20er%20ki%20ki%20product%20ache%3F",
}, },
{
id: "social-autopilot",
name: "Social Media Autopilot",
nameBn: "সোশ্যাল মিডিয়া অটোপাইলট",
kind: "Automation · Live",
kindBn: "অটোমেশন · লাইভ",
badge: "LIVE · Running daily",
description:
"Your Facebook page posts itself. Daily product carousels and spotlights, pulled from your own catalog, captioned in Bengali and watermarked automatically — every day, without anyone opening a laptop. Running on our own page right now.",
descriptionBn:
"আপনার Facebook পেজ নিজে থেকেই পোস্ট করে। দৈনিক প্রোডাক্ট carousel ও spotlight, আপনার নিজের ক্যাটালগ থেকে নেওয়া, বাংলায় ক্যাপশন সহ ও স্বয়ংক্রিয়ভাবে watermark করা — প্রতিদিন, কারো ল্যাপটপ না খুলেই। আমাদের নিজের পেজে এখনই চলছে।",
stack: ["n8n", "Meta Graph API", "Supabase", "Sharp", "Gemini"],
impact: { primary: "0", secondary: "minutes of manual posting" },
color: "blue",
highlights: [
"Daily multi-product carousel — real photos, real prices from your catalog",
"Bengali captions written for you, watermarked with your brand",
"Every card deep-links to that product's page, not just the homepage",
"Rotates brands and products so the page never looks repetitive",
"Posts keep going out whether you're at the shop or asleep",
],
highlightsBn: [
"দৈনিক মাল্টি-প্রোডাক্ট carousel — আসল ছবি, আসল দাম, আপনার ক্যাটালগ থেকে",
"বাংলা ক্যাপশন আপনার জন্য লেখা, আপনার ব্র্যান্ড দিয়ে watermark করা",
"প্রতিটা কার্ড সরাসরি সেই প্রোডাক্টের পেজে নিয়ে যায়, শুধু হোমপেজ না",
"ব্র্যান্ড ও প্রোডাক্ট ঘুরিয়ে দেখায় যাতে পেজ কখনো একঘেয়ে না লাগে",
"আপনি দোকানে থাকুন বা ঘুমান, পোস্ট চলতেই থাকে",
],
},
{
id: "ecommerce-full",
name: "Complete Online Shop",
nameBn: "সম্পূর্ণ অনলাইন দোকান",
kind: "Bundle · End to end",
kindBn: "বান্ডল · এন্ড টু এন্ড",
badge: "EVERYTHING IN ONE",
description:
"The whole shop, one roof: the website, the WhatsApp sales bot, courier booking, daily social posts, and Meta ads — built, connected, and run together. This is exactly what we run for our own brand, so you are buying a system that already sells, not a plan.",
descriptionBn:
"পুরো দোকান, এক ছাদের নিচে: ওয়েবসাইট, WhatsApp সেলস বট, কুরিয়ার বুকিং, দৈনিক সোশ্যাল পোস্ট, এবং Meta অ্যাডস — সব তৈরি, সংযুক্ত ও একসাথে চালানো। এটাই আমরা নিজেদের ব্র্যান্ডের জন্য চালাই, তাই আপনি একটা পরিকল্পনা না, একটা already-বিক্রি-করা সিস্টেম কিনছেন।",
stack: ["React", "Supabase", "WhatsApp Cloud API", "n8n", "Meta Ads", "Steadfast"],
impact: { primary: "1", secondary: "team, running all of it" },
color: "violet",
highlights: [
"Storefront with real stock, discounts and cash on delivery",
"WhatsApp bot answering and taking orders 24/7 in Bengali",
"Orders flow into one dashboard — website and bot together",
"Courier booking and tracking without leaving the dashboard",
"Daily auto-posts and Meta ad campaigns driving the traffic",
"One team accountable for the whole chain, not five vendors",
],
highlightsBn: [
"আসল স্টক, ছাড় ও cash on delivery সহ স্টোরফ্রন্ট",
"WhatsApp বট ২৪/৭ বাংলায় উত্তর দেয় ও অর্ডার নেয়",
"অর্ডার এক ড্যাশবোর্ডে আসে — ওয়েবসাইট ও বট একসাথে",
"ড্যাশবোর্ড থেকে না বেরিয়েই কুরিয়ার বুকিং ও ট্র্যাকিং",
"দৈনিক অটো-পোস্ট ও Meta অ্যাড ক্যাম্পেইন ট্রাফিক আনে",
"পুরো চেইনের জন্য একটাই দায়বদ্ধ টিম, পাঁচটা vendor না",
],
},
{ {
id: "courier-mcp", id: "courier-mcp",
name: "Aura Courier MCP", name: "Aura Courier MCP",
nameBn: "অরা কুরিয়ার MCP", nameBn: "অরা কুরিয়ার MCP",
kind: "Connector · Live", kind: "Connector · Live",
kindBn: "কানেক্টর · লাইভ",
badge: "LIVE · MCP Connector", badge: "LIVE · MCP Connector",
description: description:
"One Model Context Protocol connector for every Bangladesh courier. Add it to Claude, plug in your own courier keys, and book & track parcels — Steadfast & Pathao — straight from a conversation. Your shop's logistics, agentic.", "Universal Model Context Protocol (MCP) connector for every Bangladesh courier. Plug in your own courier keys, and book & track parcels — Steadfast, Pathao & RedX — straight from an AI conversation. Your shop's logistics, fully agentic.",
stack: ["MCP", "Steadfast", "Pathao", "Claude", "TypeScript"], descriptionBn:
"বাংলাদেশের প্রতিটা কুরিয়ারের জন্য সর্বজনীন Model Context Protocol (MCP) কানেক্টর। নিজের কুরিয়ার key বসান, আর এআই কথোপকথন থেকেই পার্সেল বুক ও ট্র্যাক করুন — Steadfast, Pathao ও RedX। আপনার লজিস্টিক্স, ফুল্লি এজেন্টিক।",
stack: ["MCP Standard", "Steadfast", "Pathao", "RedX", "TypeScript"],
impact: { primary: "1", secondary: "connector · every courier" }, impact: { primary: "1", secondary: "connector · every courier" },
color: "amber", color: "amber",
highlights: [ highlights: [
"Book & track parcels from Claude — no dashboard hopping", "Book & track parcels from any AI agent — no dashboard hopping",
"One URL, your own courier keys — nothing stored by us", "One URL, your own courier keys — nothing stored by us",
"Steadfast & Pathao live · RedX & Paperfly coming", "Steadfast & Pathao live · RedX & Paperfly coming",
"Works in Claude Desktop, Claude Code, or hosted", "Works across Gemini, Antigravity, MCP clients, or hosted API",
"Open source — anyone can add it in seconds", "Open source — anyone can add it in seconds",
], ],
highlightsBn: [
"যেকোনো এআই এজেন্ট থেকে পার্সেল বুক ও ট্র্যাক — ড্যাশবোর্ড ঘোরাঘুরি লাগবে না",
"একটা URL, আপনার নিজের কুরিয়ার key — আমরা কিছুই সংরক্ষণ করি না",
"Steadfast ও Pathao লাইভ · RedX ও Paperfly আসছে",
"Gemini, Antigravity ও যেকোনো MCP ক্লায়েন্টে কাজ করে",
"ওপেন সোর্স — যে কেউ কয়েক সেকেন্ডে যোগ করতে পারে",
],
demo: "https://courier.auraajenticai.cloud", demo: "https://courier.auraajenticai.cloud",
repo: "https://github.com/auraajenticai/aura-courier-mcp", repo: "https://github.com/auraajenticai/aura-courier-mcp",
}, },
], ],
testimonials: [ // Empty on purpose -- the old array here was fabricated (invented names, companies and quotes
{ // that never existed). Never repopulate with placeholder content; only add a testimonial once a
name: "Fahim Rahman", // real client has actually given one. The Testimonials component renders an honest
role: "CTO", // "new agency, real results coming soon" state when this is empty.
company: "FinSync BD", testimonials: [],
service: "AI Agent & Automation",
text: "Aura built an n8n + Claude pipeline that processes our reconciliation in 5 seconds — what took our team 2 hours manually. The system hasn't failed once in 6 months.",
avatar: "FR",
color: "cyan",
},
{
name: "Tanvir Hossain",
role: "Head of Trading",
company: "AlphaEdge Capital",
service: "MT5 EA & Trading",
text: "The EA outperformed our manual strategy by 340% over 3 months. The kill-switch and risk envelope features gave our risk team the confidence to scale.",
avatar: "TH",
color: "amber",
},
{
name: "Sarah Mitchell",
role: "Marketing Director",
company: "Growth Labs",
service: "AI-Powered Meta Ads",
text: "From 1.8× to 5.2× ROAS in 8 weeks. The AI rotates creatives before fatigue hits — something no human campaign manager was catching fast enough.",
avatar: "SM",
color: "rose",
},
{
name: "Arif Chowdhury",
role: "Founder",
company: "TradeStack",
service: "Web3 & Blockchain",
text: "Delivered a multi-chain settlement layer with gasless UX in 6 weeks. The on-chain audit trail is what sold us — our compliance team loves it.",
avatar: "AC",
color: "green",
},
],
pricingTiers: [ pricingTiers: [
{ {
name: "Starter", name: "Starter",
badge: null, badge: "Self-Serve",
price: 499, price: 19,
period: "one-time", period: "/month",
description: "For founders who need a fast, professional launch.", description: "Autonomous AI sales agent for growing online shops and brands.",
color: "violet", color: "violet",
features: [ features: [
"Landing page or single-service site", "1 Autonomous AI Sales Agent (WhatsApp or Messenger)",
"Mobile responsive + dark/light mode", "1,000 Autonomous Conversations / month",
"Contact form with real email", "Bengali & English Natural Language Processing (Benglish supported)",
"1 API or third-party integration", "Aura Courier MCP Integration (Steadfast & Pathao)",
"Deployed on your domain", "Automated Consignment Tracking & Real-Time Status",
"1 revision round", "Omnichannel Live Inbox with 1-Tap Human Handoff",
"14-day support window", "Standard Email & Community Support",
], ],
cta: "Get Started", cta: "Start 14-Day Free Trial",
href: "mailto:hello@auraajenticai.cloud?subject=Starter Package Enquiry", href: "https://client.auraajenticai.cloud/#auth",
}, },
{ {
name: "Growth", name: "Growth",
badge: "Most Popular", badge: "Most Popular",
price: 1499, price: 49,
period: "per project", period: "/month",
description: "Full-stack builds for teams ready to scale.", description: "Full omnichannel closing machine, COD fraud defense & multi-carrier MCP.",
color: "cyan", color: "cyan",
features: [ features: [
"Full SaaS dashboard or complex webapp", "Omnichannel AI Agent (WhatsApp + Messenger + Instagram + Facebook Comments)",
"AI agent or automation integration", "Unlimited Conversations & 24/7 Closing Engine",
"Admin dashboard + public API", "Automated COD Fraud Shield & Cancel Risk Prediction",
"Auth, billing & role-based access", "Aura Courier MCP: Multi-Carrier Smart Routing (Steadfast, Pathao, RedX, Paperfly)",
"CI/CD pipeline + VPS deployment", "Google Maps Rooftop Geocoding & Zone/Delivery Fee Engine",
"3 revision rounds", "28-Day Automated Customer Retention & Refill Machine",
"60-day support window", "Full Client Dashboard, Live Analytics Studio & CSV Export",
"Performance monitoring setup", "Priority WhatsApp & Live Chat Support",
], ],
cta: "Start Project", cta: "Deploy Growth Plan",
href: "mailto:hello@auraajenticai.cloud?subject=Growth Package Enquiry", href: "https://client.auraajenticai.cloud/#auth",
}, },
{ {
name: "Enterprise", name: "Enterprise",
badge: "Custom", badge: "Custom Cloud",
price: null, price: null,
period: null, period: null,
description: "Multi-agent systems, trading infra, and global integrations.", description: "Dedicated enterprise infrastructure, custom LLM fine-tuning & ERP integration.",
color: "amber", color: "amber",
features: [ features: [
"Custom architecture design", "Custom Fine-Tuned Domain LLMs (Retail, Healthcare, Hardware Repair)",
"Multi-agent orchestration system", "Dedicated Isolated VPS / Private Cloud Infrastructure",
"MT5 EA or Meta Ads AI system", "Custom ERP, CRM & Warehouse Management System Webhooks",
"Web3 / on-chain settlement rails", "Multi-Tenant Bot Architecture for Agency & Franchise Networks",
"Dedicated VPS infrastructure", "High-Throughput Dedicated Meta WABA & Cloud API Gateways",
"Unlimited revisions", "Dedicated Account Engineer & 99.9% Uptime SLA",
"6-month SLA support", "24/7 Emergency Incident Escalation",
"Monthly performance reports", "Direct Engineer Access via WhatsApp & Slack",
"Direct engineer access via Slack",
], ],
cta: "Book a Call", cta: "Book Architecture Call",
href: "mailto:hello@auraajenticai.cloud?subject=Enterprise Enquiry", href: "mailto:ceo@auraajenticai.cloud?subject=Enterprise SaaS Consultation",
}, },
], ],
blogArticles: [ // Empty on purpose -- the old array here was fabricated (fake publish dates predating Aura's own
{ // founding, an invented "18 months of production data" claim, and made-up client numbers matching
slug: "how-we-build-mt5-eas", // the fake case studies). Never repopulate with placeholder posts; only publish once we've written
title: "How We Build MT5 Expert Advisors That Don't Blow Accounts", // something real. The blog page renders an honest "coming soon" state when this is empty.
date: "May 20, 2026", blogArticles: [],
readTime: "8 min",
category: "Trading",
color: "amber",
excerpt: "Most EA developers focus on backtests. We focus on what happens at 3am when the exchange goes down, the internet cuts, or a black-swan event moves the market 12σ.",
content: [
{ type: "p", text: "Most EA developers show you equity curves. We show you failure modes. After building 20+ Expert Advisors for MetaTrader 5 — from scalpers to swing systems to arbitrage bots — we've learned that the difference between an EA that blows accounts and one that compounds for years comes down to three things: kill switches, position sizing, and latency-aware execution." },
{ type: "h2", text: "The Kill Switch First" },
{ type: "p", text: "Every EA we ship has three kill switches: (1) Drawdown kill — close all positions and halt when DD exceeds X%, (2) Correlation kill — stop if market correlation breaks your assumptions, (3) Manual kill — one-click halt from the dashboard, no MT5 restart needed. Most retail EAs don't have #3. Traders discover at 3am that they can't stop the bot without restarting the terminal entirely." },
{ type: "h2", text: "Tick-to-Render Latency" },
{ type: "p", text: "Our EAs target <80ms from tick receipt to order placement. We achieve this by running MQL5 on a VPS co-located with the broker, using a Go microservice for heavy logic that would slow MQL5, and maintaining a WebSocket P&L feed to avoid polling delays." },
{ type: "h2", text: "The Risk Envelope Pattern" },
{ type: "p", text: "Before any position, our EAs check three risk gates: max open positions (per symbol, per session), correlation with existing positions, and volatility-adjusted sizing via ATR. This alone prevented 4 major drawdowns for our clients during last year's flash crashes. We build EAs with the assumption that everything will go wrong. That's why they don't." },
],
},
{
slug: "meta-mcp-explained",
title: "Meta MCP: Why Official API Access Changes Everything for Ad Automation",
date: "May 15, 2026",
readTime: "6 min",
category: "AI Agents",
color: "rose",
excerpt: "When Meta opened their official MCP integration, it changed what's possible for AI-driven ad management. Here's what it means for agencies and brands.",
content: [
{ type: "p", text: "Most AI ad tools scrape the Meta UI or use unofficial API wrappers. They break when Meta updates their interface. They get blocked. They violate ToS. Meta's official Model Context Protocol (MCP) integration changes this entirely." },
{ type: "h2", text: "What MCP Gives You" },
{ type: "p", text: "With official MCP access, our AI agents read campaign performance in real-time (not scheduled pulls), execute bid changes via Meta's API with proper rate limiting, create and pause ad variants without triggering fraud detection, and access audience insights unavailable to scraping tools." },
{ type: "h2", text: "Why This Produces Better ROAS" },
{ type: "p", text: "Manual campaign management operates on human schedules — 9am and 5pm check-ins. Our AI agents run 15-minute cycles. That's 96 optimization windows per day vs. 2. Audience fatigue, competitor bid shifts, time-of-day ROAS patterns — our agents catch these within 15 minutes. Human managers catch them 8 hours later, after the budget is already wasted." },
{ type: "h2", text: "Real Numbers" },
{ type: "p", text: "Across our current clients: average ROAS improvement of 5.2× vs. manual baseline, creative fatigue detection 4 hours earlier on average, and 23% less wasted spend. Official MCP access isn't a technical detail. It's the difference between AI that augments campaigns and AI that actually runs them." },
],
},
{
slug: "why-claude-over-gpt4",
title: "Why We Chose Claude Over GPT-4 for Our Agent Infrastructure",
date: "May 8, 2026",
readTime: "5 min",
category: "AI Agents",
color: "cyan",
excerpt: "After running both models in production for 18 months, here's our honest assessment of why Claude runs every Aura agent.",
content: [
{ type: "p", text: "We're not tribal about models. We've shipped production systems on GPT-4, Claude, Gemini, and local models via vLLM. After 18 months of production data, Claude runs every Aura agent. Here's why." },
{ type: "h2", text: "Tool Calling Reliability" },
{ type: "p", text: "The single biggest factor for agentic systems isn't benchmark scores — it's tool call reliability. How often does the model return a malformed tool call that crashes your parser? In our testing across 50k+ agent runs: Claude at 0.3% malformed rate vs GPT-4 at 1.8%. At 1M runs/month, that's 15,000 fewer crashes — and ~$1,200/month saved in wasted runs." },
{ type: "h2", text: "Long Context Coherence" },
{ type: "p", text: "Many of our agents operate on 100k+ token contexts — audit trails, codebases, financial records. Claude maintains coherence over long windows significantly better. GPT-4 tends to 'forget' early context more often." },
{ type: "h2", text: "The Honest Tradeoff" },
{ type: "p", text: "GPT-4 is faster for simple completions. Claude is more reliable for complex agentic tasks. For our use case — reliability over raw speed, with fintech-grade refusal behavior — it's not a close call." },
],
},
{
slug: "n8n-vs-langchain",
title: "n8n vs LangChain: When to Use Each (We Use Both)",
date: "April 30, 2026",
readTime: "7 min",
category: "Automation",
color: "violet",
excerpt: "These are not competing tools. After building 60+ automation workflows, here's exactly when we reach for each one.",
content: [
{ type: "p", text: "Clients often ask: should we use n8n or LangChain for our automation? The answer is almost always: both. They solve different problems." },
{ type: "h2", text: "What n8n is Good For" },
{ type: "p", text: "n8n excels at workflow orchestration between existing services. Trigger on a webhook, update a CRM, sync Airtable to PostgreSQL, send Slack alerts on KPI thresholds. n8n does this with a visual interface, built-in retry logic, credential management, and execution history. Building this in code takes 3× longer and is 10× harder to debug. Rule: if the task is 'do X when Y happens, update Z' — use n8n." },
{ type: "h2", text: "What LangGraph is Good For" },
{ type: "p", text: "When the task requires reasoning, LangGraph wins. Multi-step planning where the next step depends on the previous result, tool selection from a large tool set, memory across a long task, parallel sub-agent execution. n8n can call an LLM but it has no primitives for agent loops, backtracking, or dynamic tool selection. Rule: if the model needs to decide what to do next — use LangGraph." },
{ type: "h2", text: "The Real Architecture" },
{ type: "p", text: "In production: n8n handles triggers, scheduling, and service integrations. n8n calls a LangGraph agent API when reasoning is needed. LangGraph returns a result, n8n routes it to the right destination. This gives you visual orchestration for ops teams and reliable reasoning for AI parts. Neither tool alone does both well." },
],
},
],
agentRun: [ agentRun: [
{ t: 0, kind: "system", text: "agent.session :: id=run_8af3e2 model=claude-sonnet-4.5" }, { t: 0, kind: "system", text: "agent.session :: id=run_8af3e2 model=claude-sonnet-4.5" },
@@ -401,8 +390,11 @@ const PORTFOLIO_DATA = {
id: "snehalata", id: "snehalata",
name: "Snehalata", name: "Snehalata",
tagline: "AI-Powered Clothing Ecosystem", tagline: "AI-Powered Clothing Ecosystem",
taglineBn: "এআই-চালিত ক্লথিং ইকোসিস্টেম",
description: description:
"Aura's own multi-vendor clothing marketplace for Bangladesh. Vendors register, list products, and sell — while Gemini AI handles style refinement, virtual try-on, fraud audits, and a 24/7 Bengali-language chat assistant. Built end-to-end on Aura's stack.", "Aura's own multi-vendor clothing marketplace for Bangladesh. Vendors register, list products, and sell — while Gemini AI handles style refinement, virtual try-on, fraud audits, and a 24/7 Bengali-language chat assistant. Built end-to-end on Aura's stack.",
descriptionBn:
"বাংলাদেশের জন্য Aura-র নিজস্ব multi-vendor ক্লথিং মার্কেটপ্লেস। Vendor-রা রেজিস্টার করে, প্রোডাক্ট লিস্ট করে, বিক্রি করে — আর Gemini AI স্টাইল রিফাইনমেন্ট, ভার্চুয়াল ট্রাই-অন, fraud audit, এবং ২৪/৭ বাংলা চ্যাট অ্যাসিস্ট্যান্ট সামলায়। সম্পূর্ণ Aura-র নিজের স্ট্যাকে তৈরি।",
url: "https://www.snehalata.com", url: "https://www.snehalata.com",
badge: "Ecosystem", badge: "Ecosystem",
stack: ["SvelteKit", "Supabase", "Gemini AI", "Tailwind", "Vercel"], stack: ["SvelteKit", "Supabase", "Gemini AI", "Tailwind", "Vercel"],
@@ -414,14 +406,25 @@ const PORTFOLIO_DATA = {
"Full order lifecycle: placement → quality check → delivery tracking", "Full order lifecycle: placement → quality check → delivery tracking",
"CEO & vendor dashboards with real-time ecosystem stats", "CEO & vendor dashboards with real-time ecosystem stats",
], ],
featuresBn: [
"এআই-চালিত vendor onboarding audit সহ multi-vendor মার্কেটপ্লেস",
"প্রতিটা প্রোডাক্টের জন্য Gemini-চালিত ভার্চুয়াল ট্রাই-অন ও স্টাইল ট্রান্সফার",
"শপিং গাইডেন্সের জন্য ২৪/৭ বাংলা এআই চ্যাট অ্যাসিস্ট্যান্ট",
"বাংলাদেশ জেলা-ভিত্তিক vendor ও প্রোডাক্ট ফিল্টারিং",
"সম্পূর্ণ অর্ডার লাইফসাইকেল: অর্ডার → কোয়ালিটি চেক → ডেলিভারি ট্র্যাকিং",
"রিয়েল-টাইম ইকোসিস্টেম পরিসংখ্যান সহ CEO ও vendor ড্যাশবোর্ড",
],
color: "violet", color: "violet",
}, },
{ {
id: "glamourstouch", id: "glamourstouch",
name: "Glamours Touch", name: "Glamours Touch",
tagline: "Beauty & Lifestyle E-Commerce", tagline: "Beauty & Lifestyle E-Commerce",
taglineBn: "বিউটি ও লাইফস্টাইল ই-কমার্স",
description: description:
"Aura's own live e-commerce brand in the beauty & lifestyle space. We built it, we run it, we sell from it — end to end. Custom storefront, product catalog, cart, payment integration, and admin dashboard. Not a demo. A real business.", "Aura's own live e-commerce brand in the beauty & lifestyle space. We built it, we run it, we sell from it — end to end. Custom storefront, product catalog, cart, payment integration, and admin dashboard. Not a demo. A real business.",
descriptionBn:
"বিউটি ও লাইফস্টাইল সেক্টরে Aura-র নিজস্ব লাইভ ই-কমার্স ব্র্যান্ড। আমরাই বানিয়েছি, আমরাই চালাই, আমরাই বিক্রি করি — শুরু থেকে শেষ পর্যন্ত। কাস্টম স্টোরফ্রন্ট, প্রোডাক্ট ক্যাটালগ, কার্ট, পেমেন্ট ইন্টিগ্রেশন, এবং অ্যাডমিন ড্যাশবোর্ড। কোনো ডেমো না। একটা আসল ব্যবসা।",
url: "https://glamourstouch.com", url: "https://glamourstouch.com",
badge: "Live Product", badge: "Live Product",
stack: ["React", "Vite", "Supabase", "Tailwind", "Vercel"], stack: ["React", "Vite", "Supabase", "Tailwind", "Vercel"],
@@ -433,168 +436,76 @@ const PORTFOLIO_DATA = {
"Admin dashboard for orders, products & analytics", "Admin dashboard for orders, products & analytics",
"Daily automated Facebook product posts — no manual posting", "Daily automated Facebook product posts — no manual posting",
], ],
featuresBn: [
"৫৬০+ প্রোডাক্ট ক্যাটালগ, আসল স্টক ও ছাড়ের দাম সহ",
"পুরো বাংলাদেশে cash on delivery, order tracking বিল্ট-ইন",
"WhatsApp ও Messenger সেলস বট ২৪/৭ বাংলায় কাস্টমারদের উত্তর দেয়",
"মোবাইল-ফার্স্ট রেসপনসিভ স্টোরফ্রন্ট ডিজাইন",
"অর্ডার, প্রোডাক্ট ও অ্যানালিটিক্সের জন্য অ্যাডমিন ড্যাশবোর্ড",
"দৈনিক স্বয়ংক্রিয় Facebook প্রোডাক্ট পোস্ট — ম্যানুয়াল পোস্টিং লাগে না",
],
color: "rose", color: "rose",
}, },
], ],
caseStudies: [ // Empty on purpose -- the old array here was fabricated (invented clients, quotes and metrics
{ // like "FinSync BD" and "AlphaEdge Capital" that never existed). Never repopulate with placeholder
slug: "finsync-ai-reconciliation", // content; only add a case study once a real, verifiable project is done. The CaseStudiesPage
service: "AI Agent & Automation", // component renders an honest "new agency, real results coming soon" state when this is empty.
serviceId: "ai-agent-automation", caseStudies: [],
color: "cyan",
client: "FinSync BD",
clientType: "Fintech · Series A · Dhaka",
title: "From 2-hour manual reconciliation to 5-second AI pipeline",
challenge: "FinSync's finance team was spending 2+ hours every morning reconciling 1,200+ daily payouts against bank statements — error-prone, delayed, and blocking their 9am CFO dashboard sync.",
solution: "We built a Claude-powered reconciliation agent on n8n: it fetches payouts from PostgreSQL, pulls bank data via API, runs statistical anomaly detection (flagging anything >3σ or >$5k), drafts the reconciliation note, and posts a Slack summary — all before the team arrives.",
results: [
{ metric: "5 sec", label: "reconciliation time (from 2 hours)" },
{ metric: "0", label: "failures in 6 months of production" },
{ metric: "12", label: "outliers caught per day on average" },
{ metric: "3h", label: "engineer time saved daily" },
],
stack: ["Anthropic Claude", "n8n", "PostgreSQL", "Slack API", "Node.js"],
timeline: "3 weeks build · deployed June 2025",
quote: { text: "The system hasn't failed once in 6 months.", author: "Fahim Rahman, CTO — FinSync BD" },
},
{
slug: "alphaedge-mt5-ea",
service: "MT5 EA & Trading Automation",
serviceId: "mt5-ea-trading",
color: "amber",
client: "AlphaEdge Capital",
clientType: "Prop Trading Firm · Remote",
title: "340% strategy outperformance over 3 months with an MT5 EA",
challenge: "AlphaEdge was running manual trading strategies with 12 traders monitoring screens in shifts. Execution delays, emotion-driven exits, and inability to scale across symbols were killing performance.",
solution: "We built a multi-symbol MT5 Expert Advisor with a three-layer risk engine: drawdown kill switch (auto-halts at X%), volatility-adjusted position sizing via ATR, and a real-time P&L dashboard with one-click halt. All orders execute within <80ms of signal generation.",
results: [
{ metric: "340%", label: "outperformance vs. manual baseline (3 months)" },
{ metric: "<80ms", label: "tick-to-order execution latency" },
{ metric: "4", label: "major drawdowns prevented by kill switch" },
{ metric: "12→1", label: "traders needed to monitor (from 12 to 1)" },
],
stack: ["MQL5", "Go", "WebSockets", "React", "ClickHouse"],
timeline: "4 weeks build · live on demo 2 weeks · mainnet August 2025",
quote: { text: "The kill-switch and risk envelope features gave our risk team the confidence to scale.", author: "Tanvir Hossain, Head of Trading — AlphaEdge Capital" },
},
{
slug: "growth-labs-meta-ads-ai",
service: "AI-Powered Meta Ads",
serviceId: "meta-ads-ai",
color: "rose",
client: "Growth Labs",
clientType: "Performance Marketing Agency · UAE",
title: "1.8× to 5.2× ROAS in 8 weeks using Meta AI agent",
challenge: "Growth Labs was managing 3 e-commerce clients manually — two campaign managers checking ads twice daily. Creative fatigue went undetected for 4+ hours, wasting budget. ROAS was plateauing at 1.8–2.2×.",
solution: "We deployed a Claude-powered Meta Ads agent using the official Meta MCP integration. The agent runs 15-minute optimization cycles: reallocating budget to winning ad sets, pausing fatigued creatives before CTR drops, generating 100+ variant titles for A/B tests, and sending daily AI-written performance digests.",
results: [
{ metric: "5.2×", label: "ROAS (from 1.8× baseline)" },
{ metric: "8 weeks", label: "to reach peak ROAS" },
{ metric: "4h earlier", label: "creative fatigue detection vs. human" },
{ metric: "23%", label: "less wasted spend per month" },
],
stack: ["Meta MCP", "Meta Ads API", "Anthropic Claude", "n8n", "PostgreSQL"],
timeline: "5 days setup · results visible within week 2",
quote: { text: "From 1.8× to 5.2× ROAS in 8 weeks. The AI rotates creatives before fatigue hits.", author: "Sarah Mitchell, Marketing Director — Growth Labs" },
},
{
slug: "tradestack-web3-settlement",
service: "Web3 & Blockchain",
serviceId: "web3-blockchain",
color: "green",
client: "TradeStack",
clientType: "DeFi Protocol · Singapore",
title: "Multi-chain settlement layer with gasless UX — shipped in 6 weeks",
challenge: "TradeStack needed on-chain settlement for commodity trades across 4 EVM chains — with a compliance audit trail and a UX that hid gas complexity from non-crypto-native traders.",
solution: "We built a multi-chain bridge with ERC-2771 meta-transactions (gasless UX), on-chain settlement with immutable audit logs, and a React dashboard where traders confirm in one click without ever touching ETH. Full Solidity audit trail for compliance.",
results: [
{ metric: "4 chains", label: "live simultaneously (ETH, BSC, Polygon, Arbitrum)" },
{ metric: "0 gas", label: "paid by end users (fully abstracted)" },
{ metric: "6 weeks", label: "from spec to mainnet" },
{ metric: "100%", label: "compliance team sign-off on audit trail" },
],
stack: ["Solidity", "viem", "wagmi", "ERC-2771", "Cloudflare Workers", "React"],
timeline: "6 weeks · mainnet September 2025",
quote: { text: "The on-chain audit trail is what sold us — our compliance team loves it.", author: "Arif Chowdhury, Founder — TradeStack" },
},
{
slug: "saas-dashboard-50k-dau",
service: "Website & Webapp Development",
serviceId: "web-app-dev",
color: "violet",
client: "Series-B SaaS (Confidential)",
clientType: "B2B SaaS · Remote",
title: "Dashboard rebuild: 4k to 28k DAU, zero downtime migration",
challenge: "A Series-B SaaS was running a 4-year-old monolith dashboard that couldn't handle load past 10k concurrent users. Billing was broken for enterprise tiers, and the RBAC system couldn't support their new multi-tenant model.",
solution: "We rebuilt the dashboard surface area: SvelteKit frontend, new multi-tenant Postgres schema, Stripe billing with usage-based pricing, RBAC with 12 permission layers, and a zero-downtime migration path using feature flags.",
results: [
{ metric: "28k", label: "DAU (from 4k before rebuild)" },
{ metric: "0", label: "downtime during migration" },
{ metric: "3×", label: "faster page load (Core Web Vitals)" },
{ metric: "$0", label: "billing errors post-launch (vs. 40+/week before)" },
],
stack: ["SvelteKit", "PostgreSQL", "Stripe", "Drizzle ORM", "Tailwind", "Vercel"],
timeline: "14 weeks total · phased rollout",
quote: { text: "Lead architect on three SaaS dashboards now serving 50k+ daily users.", author: "Internal team" },
},
{
slug: "vps-infra-cost-cut",
service: "Infrastructure & DevOps",
serviceId: "infra-devops",
color: "cyan",
client: "E-commerce Platform (Confidential)",
clientType: "E-commerce · Bangladesh",
title: "60% cloud bill reduction: AWS to self-hosted Coolify in 5 days",
challenge: "A Dhaka-based e-commerce platform was spending $3,200/month on AWS managed services — RDS, ECS, load balancers — for a workload that needed none of the complexity. Infra was also managed by an AWS agency adding 40% markup.",
solution: "We migrated everything to a €40/month Hetzner VPS running Coolify: Traefik for SSL + routing, Docker Compose for all services, GitHub Actions CI/CD with automatic rollback on health-check failure. Total setup time: 5 days.",
results: [
{ metric: "60%", label: "monthly infra cost reduction ($3,200 → $1,280)" },
{ metric: "5 days", label: "full migration with zero data loss" },
{ metric: "99.98%", label: "uptime in first 6 months" },
{ metric: "$0", label: "agency markup eliminated" },
],
stack: ["Coolify", "Hetzner VPS", "Traefik", "Docker", "GitHub Actions", "PostgreSQL"],
timeline: "5 days migration · March 2026",
quote: { text: "Same reliability, fraction of the cost.", author: "Aura Engineering Team" },
},
],
// Real Aura milestones, dated -- not an individual's job history. Add a new entry only when
// something actually, verifiably happened; never backfill a "years of experience" narrative.
experience: [ experience: [
{ {
year: "2024 — Present", year: "Sep 2026",
role: "Founder & Principal Engineer", role: "Bangladesh's 1st Courier MCP Engine Launched",
company: "Aura Agentic Cloud", roleBn: "বাংলাদেশের প্রথম কুরিয়ার MCP ইঞ্জিন চালু",
kind: "Product", company: "Aura Logistics MCP",
detail: "Building the agent runtime layer — orchestration, evals, observability — used by 12 enterprise teams.", kind: "Innovation",
kindBn: "উদ্ভাবন",
detail: "Launched Bangladesh's first Model Context Protocol (MCP) carrier orchestration hub integrating Steadfast, Pathao, RedX, Paperfly & Google Maps routing.",
detailBn: "Steadfast, Pathao, RedX, Paperfly ও Google Maps রাউটিং সমন্বয়ে দেশের প্রথম Model Context Protocol (MCP) লজিস্টিক হাব চালু।",
}, },
{ {
year: "2022 — 2024", year: "Aug 2026",
role: "Staff Full-Stack Engineer", role: "Meta Tech Provider status",
company: "Confidential · Fintech", roleBn: "Meta Tech Provider status অর্জন",
kind: "Contract", company: "Aura Ajentic AI",
detail: "Led the rebuild of an MLM compensation engine, ran the migration from monolith to multi-tenant.", kind: "Milestone",
kindBn: "মাইলফলক",
detail: "Approved to onboard other businesses' WhatsApp Business numbers, on top of our own.",
detailBn: "নিজের ছাড়াও অন্য ব্যবসার WhatsApp Business নম্বর onboard করার অনুমোদন পেয়েছি।",
}, },
{ {
year: "2021 — 2022", year: "Aug 2026",
role: "Senior Engineer · Web3", role: "WhatsApp Business API approved",
company: "Stealth DeFi protocol", roleBn: "WhatsApp Business API অনুমোদিত",
kind: "Contract", company: "Aura Ajentic AI",
detail: "Wallet UX, signer abstraction, on-chain settlement rails. Shipped before the protocol announced.", kind: "Milestone",
kindBn: "মাইলফলক",
detail: "Meta approved our WhatsApp messaging integration — our own sales bot went fully live.",
detailBn: "Meta আমাদের WhatsApp messaging integration অনুমোদন করেছে — আমাদের নিজের sales বট পুরোপুরি live হয়েছে।",
}, },
{ {
year: "2019 — 2021", year: "Jul 2026",
role: "Full-Stack Engineer", role: "First paying client signed",
company: "Series-B SaaS", roleBn: "প্রথম paying client",
kind: "Full-time", company: "Applix BD",
detail: "Owned the dashboard surface area — billing, RBAC, integrations. Pushed app from 4k to 28k DAU.", kind: "Client",
kindBn: "ক্লায়েন্ট",
detail: "A Dhaka mobile-parts retailer became our first client — automated their Facebook posting and ad ops.",
detailBn: "ঢাকার একটা mobile-parts retailer আমাদের প্রথম client হন — তাদের Facebook posting আর ad কাজ automate করেছি।",
}, },
{ {
year: "2018 — 2019", year: "Jul 2026",
role: "Software Engineer", role: "Aura Ajentic AI founded",
company: "Agency · Remote", roleBn: "Aura Ajentic AI প্রতিষ্ঠা",
kind: "Full-time", company: "Dhaka, Bangladesh",
detail: "Cut my teeth shipping React + Node products across e-commerce, logistics, and edtech.", kind: "Founding",
kindBn: "প্রতিষ্ঠা",
detail: "Started building our own live products first — Glamour's Touch (K-beauty e-commerce) and Snehalata (AI marketplace) — before pitching anyone else.",
detailBn: "আগে নিজেদের live প্রোডাক্ট বানানো শুরু করি — Glamour's Touch (K-beauty e-commerce) আর Snehalata (AI marketplace) — অন্য কাউকে pitch করার আগেই।",
}, },
], ],
}; };
+31 -20
View File
@@ -120,10 +120,30 @@ const TerminalRain = () => {
); );
}; };
const HERO_TXT = {
en: {
pill: "Accepting new projects · Q3 2026",
getStarted: "Get Started Free",
viewServices: "View Services",
lastShipped: "Last shipped: 2 days ago",
},
bn: {
pill: "নতুন প্রজেক্ট নেওয়া হচ্ছে · Q3 2026",
getStarted: "ফ্রি শুরু করুন",
viewServices: "সার্ভিস দেখুন",
lastShipped: "সর্বশেষ শিপড: ২ দিন আগে",
},
};
// Same self-serve destination as the nav's "Get Started" -- lands a fresh signup straight on the
// client portal's service catalog instead of a blank dashboard.
const HERO_REGISTER_URL = "https://auth.auraajenticai.cloud/register?next=" + encodeURIComponent("https://client.auraajenticai.cloud/services");
const Hero = ({ headlinePrefix, headlineSuffix, lang = "en" }) => { const Hero = ({ headlinePrefix, headlineSuffix, lang = "en" }) => {
const D = PORTFOLIO_DATA; const D = PORTFOLIO_DATA;
const prefix = headlinePrefix || "Agentic AI &"; const prefix = headlinePrefix || "Agentic AI &";
const suffix = headlineSuffix || "automation engineer"; const suffix = headlineSuffix || "automation engineer";
const t = HERO_TXT[lang] || HERO_TXT.en;
return ( return (
<section id="top" style={{ <section id="top" style={{
@@ -158,7 +178,7 @@ const Hero = ({ headlinePrefix, headlineSuffix, lang = "en" }) => {
boxShadow: "0 0 10px var(--good)", boxShadow: "0 0 10px var(--good)",
animation: "pulse-dot 2s infinite", animation: "pulse-dot 2s infinite",
}} /> }} />
Accepting new projects · Q3 2026 {t.pill}
</div> </div>
{/* headline */} {/* headline */}
@@ -189,39 +209,30 @@ const Hero = ({ headlinePrefix, headlineSuffix, lang = "en" }) => {
lineHeight: 1.55, lineHeight: 1.55,
color: "var(--text-dim)", color: "var(--text-dim)",
}}> }}>
{D.brand.tagline} {lang === "bn" ? D.brand.taglineBn : D.brand.tagline}
</p>
<p style={{
marginTop: 8,
maxWidth: 620,
fontSize: 14,
lineHeight: 1.6,
color: "var(--text-faint)",
fontFamily: "var(--font-sans)",
}}>
{D.brand.taglineBn}
</p> </p>
{/* CTAs */} {/* CTAs */}
<div style={{ display: "flex", gap: 12, marginTop: 40, flexWrap: "wrap" }}> <div style={{ display: "flex", gap: 12, marginTop: 40, flexWrap: "wrap" }}>
<a href="#work" style={{ <a href={HERO_REGISTER_URL} style={{
display: "inline-flex", display: "inline-flex",
alignItems: "center", alignItems: "center",
gap: 8, gap: 8,
padding: "12px 20px", padding: "12px 20px",
background: "var(--text)", background: "linear-gradient(110deg, var(--accent), var(--accent-2))",
color: "var(--bg)", color: "#fff",
fontSize: 14, fontSize: 14,
fontWeight: 500, fontWeight: 500,
borderRadius: 10, borderRadius: 10,
textDecoration: "none",
transition: "transform 0.15s", transition: "transform 0.15s",
}} }}
onMouseEnter={e => e.currentTarget.style.transform = "translateY(-1px)"} onMouseEnter={e => e.currentTarget.style.transform = "translateY(-1px)"}
onMouseLeave={e => e.currentTarget.style.transform = "none"} onMouseLeave={e => e.currentTarget.style.transform = "none"}
> >
View Services <Icons.Arrow size={14} /> {t.getStarted} <Icons.Arrow size={14} />
</a> </a>
<a href="#contact" style={{ <a href="#work" style={{
display: "inline-flex", display: "inline-flex",
alignItems: "center", alignItems: "center",
gap: 8, gap: 8,
@@ -234,7 +245,7 @@ const Hero = ({ headlinePrefix, headlineSuffix, lang = "en" }) => {
borderRadius: 10, borderRadius: 10,
textDecoration: "none", textDecoration: "none",
}}> }}>
Get a Quote <Icons.ArrowUpRight size={14} /> {t.viewServices} <Icons.ArrowUpRight size={14} />
</a> </a>
</div> </div>
@@ -252,7 +263,7 @@ const Hero = ({ headlinePrefix, headlineSuffix, lang = "en" }) => {
<span>·</span> <span>·</span>
<span>{D.brand.domain}</span> <span>{D.brand.domain}</span>
<span>·</span> <span>·</span>
<span>Last shipped: 2 days ago</span> <span>{t.lastShipped}</span>
</div> </div>
{/* metric strip */} {/* metric strip */}
@@ -282,7 +293,7 @@ const Hero = ({ headlinePrefix, headlineSuffix, lang = "en" }) => {
fontFamily: "var(--font-mono)", fontFamily: "var(--font-mono)",
textTransform: "uppercase", textTransform: "uppercase",
letterSpacing: "0.06em", letterSpacing: "0.06em",
}}>{m.label}</div> }}>{lang === "bn" ? m.labelBn : m.label}</div>
</div> </div>
))} ))}
</div> </div>
+2 -1
View File
@@ -43,12 +43,13 @@ const Icons = {
Send: (p) => <Icon {...p}><path d="m22 2-7 20-4-9-9-4 20-7z" /></Icon>, Send: (p) => <Icon {...p}><path d="m22 2-7 20-4-9-9-4 20-7z" /></Icon>,
Globe: (p) => <Icon {...p}><circle cx="12" cy="12" r="10" /><path d="M2 12h20M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z" /></Icon>, Globe: (p) => <Icon {...p}><circle cx="12" cy="12" r="10" /><path d="M2 12h20M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z" /></Icon>,
Terminal: (p) => <Icon {...p}><path d="m4 17 6-6-6-6M12 19h8" /></Icon>, Terminal: (p) => <Icon {...p}><path d="m4 17 6-6-6-6M12 19h8" /></Icon>,
WhatsApp: (p) => <Icon {...p}><path d="M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z" /></Icon>,
Logo: ({ size = 28, full = false }) => ( Logo: ({ size = 28, full = false }) => (
<img <img
src="logo.png" src="logo.png"
width={full ? size * 4 : size} width={full ? size * 4 : size}
height={size} height={size}
alt="Aura Agentic AI" alt="Aura Ajentic AI"
style={{ style={{
objectFit: "contain", objectFit: "contain",
objectPosition: "center", objectPosition: "center",
+294 -19
View File
@@ -1,16 +1,45 @@
// 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", url: "#/services" }, { id: "services", label: "Services", labelBn: "সার্ভিস", url: "#/services" },
{ id: "case-studies", label: "Case Studies", url: "#/case-studies" }, { id: "case-studies", label: "Case Studies", labelBn: "কেস স্টাডি", url: "#/case-studies" },
{ id: "pricing", label: "Pricing", url: "#/pricing" }, { id: "pricing", label: "Pricing", labelBn: "মূল্য", url: "#/pricing" },
{ id: "blog", label: "Blog", url: "#/blog" }, { id: "blog", label: "Blog", labelBn: "ব্লগ", url: "#/blog" },
{ id: "contact", label: "Contact", url: "#/contact" }, { id: "contact", label: "Contact", labelBn: "যোগাযোগ", url: "#/contact" },
] ];
const NAV_TXT = {
en: {
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: "অ্যাপ ইনস্টলড",
},
};
// Next redirects ensure clients land seamlessly in the right SaaS portal
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 bn = lang === "bn";
React.useEffect(() => { React.useEffect(() => {
const onScroll = () => setScrolled(window.scrollY > 12); const onScroll = () => setScrolled(window.scrollY > 12);
@@ -18,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={{
@@ -72,7 +144,7 @@ const Nav = ({ onCmdK, theme, onToggleTheme, accent, lang, onToggleLang, route }
e.currentTarget.style.color = isActive ? "var(--text)" : "var(--text-dim)"; e.currentTarget.style.color = isActive ? "var(--text)" : "var(--text-dim)";
e.currentTarget.style.background = isActive ? "var(--line)" : "transparent"; e.currentTarget.style.background = isActive ? "var(--line)" : "transparent";
}} }}
>{l.label}</a> >{bn && l.labelBn ? l.labelBn : l.label}</a>
); );
})} })}
</div> </div>
@@ -91,7 +163,7 @@ const Nav = ({ onCmdK, theme, onToggleTheme, accent, lang, onToggleLang, route }
fontSize: 12.5, fontSize: 12.5,
}}> }}>
<Icons.Search size={13} /> <Icons.Search size={13} />
<span>Search</span> <span>{t.search}</span>
<kbd style={{ <kbd style={{
fontFamily: "var(--font-mono)", fontFamily: "var(--font-mono)",
fontSize: 10.5, fontSize: 10.5,
@@ -127,7 +199,33 @@ const Nav = ({ onCmdK, theme, onToggleTheme, accent, lang, onToggleLang, route }
{lang === "en" ? "বাং" : "EN"} {lang === "en" ? "বাং" : "EN"}
</button> </button>
<a href="mailto:hello@auraajenticai.cloud?subject=Project Quote" className="nav-quote-btn" style={{ {/* 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={{
padding: "7px 13px", padding: "7px 13px",
background: "transparent", background: "transparent",
border: "1px solid var(--line)", border: "1px solid var(--line)",
@@ -138,10 +236,28 @@ const Nav = ({ onCmdK, theme, onToggleTheme, accent, lang, onToggleLang, route }
textDecoration: "none", textDecoration: "none",
whiteSpace: "nowrap", whiteSpace: "nowrap",
}}> }}>
Get a Quote {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",
background: "transparent",
border: "1px solid var(--line)",
borderRadius: 8,
color: "var(--text-dim)",
fontSize: 13,
fontWeight: 500,
textDecoration: "none",
whiteSpace: "nowrap",
}}
>
{t.clientLogin}
</a>
<a href={REGISTER_URL} className="nav-signup-btn" style={{
display: "flex", display: "flex",
alignItems: "center", alignItems: "center",
gap: 6, gap: 6,
@@ -154,7 +270,7 @@ const Nav = ({ onCmdK, theme, onToggleTheme, accent, lang, onToggleLang, route }
textDecoration: "none", textDecoration: "none",
whiteSpace: "nowrap", whiteSpace: "nowrap",
}}> }}>
Client Login <Icons.Arrow size={13} /> {t.getStarted} <Icons.Arrow size={13} />
</a> </a>
</div> </div>
@@ -195,11 +311,12 @@ 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; }
.nav-lang-btn { display: none !important; }
} }
@media (max-width: 480px) { @media (max-width: 480px) {
.nav-login-btn { display: none !important; } .nav-login-btn { display: none !important; }
.nav-signup-btn { display: none !important; }
.nav-hamburger { display: flex !important; } .nav-hamburger { display: flex !important; }
} }
`}</style> `}</style>
@@ -221,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}
@@ -235,7 +396,7 @@ const Nav = ({ onCmdK, theme, onToggleTheme, accent, lang, onToggleLang, route }
display: "block", display: "block",
borderBottom: "1px solid var(--line)", borderBottom: "1px solid var(--line)",
}} }}
>{l.label}</a> >{bn && l.labelBn ? l.labelBn : l.label}</a>
))} ))}
<div style={{ display: "flex", gap: 8, marginTop: 14, flexWrap: "wrap" }}> <div style={{ display: "flex", gap: 8, marginTop: 14, flexWrap: "wrap" }}>
<button onClick={() => { onToggleTheme(); setMenuOpen(false); }} style={{ <button onClick={() => { onToggleTheme(); setMenuOpen(false); }} style={{
@@ -262,7 +423,7 @@ const Nav = ({ onCmdK, theme, onToggleTheme, accent, lang, onToggleLang, route }
{lang === "en" ? "বাংলা" : "English"} {lang === "en" ? "বাংলা" : "English"}
</button> </button>
<a <a
href="mailto:hello@auraajenticai.cloud?subject=Project Quote" href="mailto:ceo@auraajenticai.cloud?subject=Project Quote"
onClick={() => setMenuOpen(false)} onClick={() => setMenuOpen(false)}
style={{ style={{
padding: "8px 14px", padding: "8px 14px",
@@ -273,9 +434,23 @@ const Nav = ({ onCmdK, theme, onToggleTheme, accent, lang, onToggleLang, route }
fontSize: 13, fontSize: 13,
textDecoration: "none", textDecoration: "none",
}} }}
>Get a Quote</a> >{t.quote}</a>
<a <a
href="https://auth.auraajenticai.cloud/login" href={CLIENT_LOGIN_URL}
onClick={() => setMenuOpen(false)}
style={{
padding: "8px 14px",
background: "transparent",
border: "1px solid var(--line)",
color: "var(--text-dim)",
fontSize: 13,
fontWeight: 500,
borderRadius: 8,
textDecoration: "none",
}}
>{t.clientLogin}</a>
<a
href={REGISTER_URL}
onClick={() => setMenuOpen(false)} onClick={() => setMenuOpen(false)}
style={{ style={{
padding: "8px 14px", padding: "8px 14px",
@@ -286,7 +461,107 @@ const Nav = ({ onCmdK, theme, onToggleTheme, accent, lang, onToggleLang, route }
borderRadius: 8, borderRadius: 8,
textDecoration: "none", textDecoration: "none",
}} }}
>Client Login</a> >{t.getStarted}</a>
</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>
</div> </div>
)} )}
+135 -20
View File
@@ -221,7 +221,7 @@ const ServicesPage = ({ lang }) => {
)} )}
<a <a
href={`mailto:hello@auraajenticai.cloud?subject=Enquiry: ${svc.name}`} href={`mailto:ceo@auraajenticai.cloud?subject=Enquiry: ${svc.name}`}
onClick={e => e.stopPropagation()} onClick={e => e.stopPropagation()}
style={{ style={{
alignSelf: "flex-start", alignSelf: "flex-start",
@@ -330,9 +330,9 @@ const TimelinePage = () => {
return ( return (
<main> <main>
<PageHero <PageHero
eyebrow="Experience" eyebrow="Milestones"
title="Seven years of shipping" title="Founded July 2026, shipping since day one"
sub="From agency work to fintech infrastructure to founding Aura — the full arc." sub="Real, dated milestones — not a résumé. We add one only when something actually happened."
/> />
<section style={{ padding: "80px 0 120px" }}> <section style={{ padding: "80px 0 120px" }}>
<div className="container"> <div className="container">
@@ -397,10 +397,10 @@ const ContactPage = ({ lang }) => {
if (res.ok) { if (res.ok) {
setSent(true); setSent(true);
} else { } else {
alert('Something went wrong. Please email us directly at hello@auraajenticai.cloud'); alert('Something went wrong. Please email us directly at ceo@auraajenticai.cloud');
} }
} catch { } catch {
alert('Could not send message. Please email us at hello@auraajenticai.cloud'); alert('Could not send message. Please email us at ceo@auraajenticai.cloud');
} }
setLoading(false); setLoading(false);
}; };
@@ -421,7 +421,8 @@ const ContactPage = ({ lang }) => {
<div> <div>
<div style={{ display: "grid", gap: 24 }}> <div style={{ display: "grid", gap: 24 }}>
{[ {[
{ label: "Email", value: "hello@auraajenticai.cloud", href: "mailto:hello@auraajenticai.cloud" }, { label: "Email", value: "ceo@auraajenticai.cloud", href: "mailto:ceo@auraajenticai.cloud" },
{ label: "WhatsApp", value: "+880 1911-877091", href: "https://wa.me/8801911877091" },
{ label: "Response time", value: "< 24 hours" }, { label: "Response time", value: "< 24 hours" },
{ label: "Location", value: "Dhaka, Bangladesh · Remote" }, { label: "Location", value: "Dhaka, Bangladesh · Remote" },
{ label: "Availability", value: "Open to new projects" }, { label: "Availability", value: "Open to new projects" },
@@ -538,9 +539,9 @@ const PricingPage = () => {
return ( return (
<main> <main>
<PageHero <PageHero
eyebrow="Pricing" eyebrow="Platform Plans & Subscriptions"
title={<>Transparent pricing. <span style={{ fontFamily: "var(--font-serif)", fontStyle: "italic", fontWeight: 400 }}>No surprises.</span></>} title={<>Simple, predictable SaaS pricing. <span style={{ fontFamily: "var(--font-serif)", fontStyle: "italic", fontWeight: 400 }}>Built to scale with your sales.</span></>}
sub="Fixed-scope projects. No retainers for decks. Every tier ends with production code on your domain." sub="Zero agency retainers or project markups. Power your e-commerce business with autonomous AI sales agents, COD fraud defense, and Bangladesh's 1st Courier MCP infrastructure."
/> />
<section style={{ padding: "80px 0 120px" }}> <section style={{ padding: "80px 0 120px" }}>
<div className="container"> <div className="container">
@@ -591,7 +592,7 @@ const PricingPage = () => {
<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>
) : ( ) : (
<div style={{ fontSize: 28, fontWeight: 700, color: c.text }}>Custom Quote</div> <div style={{ fontSize: 28, fontWeight: 700, color: c.text }}>Custom Architecture</div>
)} )}
</div> </div>
@@ -632,17 +633,17 @@ const PricingPage = () => {
gap: 24, alignItems: "center", gap: 24, alignItems: "center",
}} className="pricing-cta-row"> }} className="pricing-cta-row">
<div> <div>
<h3 style={{ margin: "0 0 6px", fontSize: 18, fontWeight: 500 }}>Not sure which tier fits your project?</h3> <h3 style={{ margin: "0 0 6px", fontSize: 18, fontWeight: 500 }}>Looking for custom enterprise deployment or high-volume API access?</h3>
<p style={{ margin: 0, fontSize: 14, color: "var(--text-dim)" }}>Email us a brief description — we'll scope it and get back within 24 hours.</p> <p style={{ margin: 0, fontSize: 14, color: "var(--text-dim)" }}>Our engineering team deploys dedicated private cloud instances, custom domain fine-tuning, and direct ERP/CRM integrations.</p>
</div> </div>
<a <a
href="mailto:hello@auraajenticai.cloud?subject=Project Scoping" href="mailto:ceo@auraajenticai.cloud?subject=Enterprise SaaS Consultation"
style={{ style={{
padding: "12px 24px", background: "var(--text)", color: "var(--bg)", padding: "12px 24px", background: "var(--text)", color: "var(--bg)",
borderRadius: 10, fontSize: 14, fontWeight: 500, borderRadius: 10, fontSize: 14, fontWeight: 500,
textDecoration: "none", whiteSpace: "nowrap", textDecoration: "none", whiteSpace: "nowrap",
}} }}
>Get a Quote →</a> >Talk to Engineering →</a>
</div> </div>
</div> </div>
</section> </section>
@@ -753,7 +754,7 @@ const BlogPage = () => {
Want to build something like this? Want to build something like this?
</p> </p>
<a <a
href={`mailto:hello@auraajenticai.cloud?subject=Enquiry from blog: ${article.title}`} href={`mailto:ceo@auraajenticai.cloud?subject=Enquiry from blog: ${article.title}`}
style={{ style={{
display: "inline-flex", padding: "10px 22px", display: "inline-flex", padding: "10px 22px",
background: "var(--text)", color: "var(--bg)", background: "var(--text)", color: "var(--bg)",
@@ -773,10 +774,18 @@ const BlogPage = () => {
<PageHero <PageHero
eyebrow="Blog" eyebrow="Blog"
title={<>How we build — <span style={{ fontFamily: "var(--font-serif)", fontStyle: "italic", fontWeight: 400 }}>openly</span></>} title={<>How we build — <span style={{ fontFamily: "var(--font-serif)", fontStyle: "italic", fontWeight: 400 }}>openly</span></>}
sub="Technical deep-dives on AI agents, trading systems, and the infrastructure behind Aura." sub="Technical write-ups on AI agents, trading systems, and the infrastructure behind Aura — as we ship them, not before."
/> />
<section style={{ padding: "80px 0 120px" }}> <section style={{ padding: "80px 0 120px" }}>
<div className="container"> <div className="container">
{articles.length === 0 ? (
<div className="panel" style={{ padding: "56px 32px", textAlign: "center", borderRadius: "var(--radius)" }}>
<p style={{ margin: 0, fontSize: 17, color: "var(--text-dim)", lineHeight: 1.65, maxWidth: 560, marginInline: "auto" }}>
We're an early-stage startup — real technical write-ups are coming as our platform ships
and proves out in production. We'd rather show nothing here than a fabricated post.
</p>
</div>
) : (
<div style={{ display: "grid", gap: 20 }}> <div style={{ display: "grid", gap: 20 }}>
{articles.map((post, i) => { {articles.map((post, i) => {
const c = BLOG_COLORS[post.color] || BLOG_COLORS.violet; const c = BLOG_COLORS[post.color] || BLOG_COLORS.violet;
@@ -817,6 +826,7 @@ const BlogPage = () => {
); );
})} })}
</div> </div>
)}
</div> </div>
</section> </section>
</main> </main>
@@ -913,7 +923,7 @@ const ServiceDetailPage = ({ svc }) => {
</a> </a>
)} )}
<a <a
href={`mailto:hello@auraajenticai.cloud?subject=Enquiry: ${svc.name}`} href={`mailto:ceo@auraajenticai.cloud?subject=Enquiry: ${svc.name}`}
style={{ style={{
display: 'inline-flex', alignItems: 'center', gap: 6, display: 'inline-flex', alignItems: 'center', gap: 6,
padding: '10px 20px', borderRadius: 9, padding: '10px 20px', borderRadius: 9,
@@ -1044,7 +1054,7 @@ const ServiceDetailPage = ({ svc }) => {
</div> </div>
<div style={{ display: 'flex', gap: 12, flexWrap: 'wrap' }}> <div style={{ display: 'flex', gap: 12, flexWrap: 'wrap' }}>
<a <a
href={`mailto:hello@auraajenticai.cloud?subject=Project: ${svc.name}`} href={`mailto:ceo@auraajenticai.cloud?subject=Project: ${svc.name}`}
style={{ style={{
padding: '12px 28px', background: 'var(--text)', color: 'var(--bg)', padding: '12px 28px', background: 'var(--text)', color: 'var(--bg)',
borderRadius: 10, fontSize: 14, fontWeight: 500, borderRadius: 10, fontSize: 14, fontWeight: 500,
@@ -1179,7 +1189,7 @@ const CaseStudyDetail = ({ cs, onBack }) => {
Describe your project — we respond within 24h with a scoped proposal. Describe your project — we respond within 24h with a scoped proposal.
</p> </p>
</div> </div>
<a href={`mailto:hello@auraajenticai.cloud?subject=Project: ${cs.service}`} style={{ <a href={`mailto:ceo@auraajenticai.cloud?subject=Project: ${cs.service}`} style={{
padding: "11px 24px", background: "var(--text)", color: "var(--bg)", padding: "11px 24px", background: "var(--text)", color: "var(--bg)",
borderRadius: 9, fontSize: 14, fontWeight: 500, borderRadius: 9, fontSize: 14, fontWeight: 500,
textDecoration: "none", whiteSpace: "nowrap", flexShrink: 0, textDecoration: "none", whiteSpace: "nowrap", flexShrink: 0,
@@ -1213,6 +1223,19 @@ const CaseStudiesPage = () => {
/> />
<section style={{ padding: "80px 0 120px" }}> <section style={{ padding: "80px 0 120px" }}>
<div className="container"> <div className="container">
{cases.length === 0 ? (
<div className="panel" style={{ padding: "56px 32px", textAlign: "center", borderRadius: "var(--radius)" }}>
<p style={{ margin: 0, fontSize: 17, color: "var(--text-dim)", lineHeight: 1.65, maxWidth: 560, marginInline: "auto" }}>
We're an early-stage startup — live customer case studies are being documented as production
deployments prove out. We'd rather show nothing here than a fabricated result.
</p>
<a href="#/contact" style={{
display: "inline-flex", marginTop: 24,
padding: "11px 24px", background: "var(--text)", color: "var(--bg)",
borderRadius: 9, fontSize: 14, fontWeight: 500, textDecoration: "none",
}}>Be our next case study →</a>
</div>
) : (
<div style={{ display: "grid", gap: 20 }}> <div style={{ display: "grid", gap: 20 }}>
{cases.map((cs, i) => { {cases.map((cs, i) => {
const c = CASE_COLORS[cs.color] || CASE_COLORS.cyan; const c = CASE_COLORS[cs.color] || CASE_COLORS.cyan;
@@ -1272,12 +1295,102 @@ const CaseStudiesPage = () => {
); );
})} })}
</div> </div>
)}
</div> </div>
</section> </section>
</main> </main>
); );
}; };
const LEGAL_SECTIONS = [
{
h: "What we collect",
p: "When you use the contact form on this site, we collect your name, email address, the service you're asking about, your budget range (if given), and your project description. When you sign in to an Aura product (like the client dashboard), we collect your email, name, and — if you use Google Sign-In — the basic profile info Google shares with us (name, email, profile photo). We don't collect payment card details ourselves; any payment processing runs through the payment provider directly.",
},
{
h: "Analytics",
p: "This site uses Google Analytics, Google Tag Manager, and Plausible Analytics to understand traffic and usage — page views, referral source, rough device/location info. Plausible doesn't use cookies or track individuals across sites. Google's tools may use cookies; you can opt out via your browser's cookie settings or Google's own opt-out tools.",
},
{
h: "How we use it",
p: "Contact form submissions are used only to respond to your enquiry — we don't sell, rent, or share your contact details with third parties for marketing. Account info is used to run the product you signed up for (e.g. showing you your own projects and invoices in the client dashboard) and isn't shared outside Aura's own systems.",
},
{
h: "Third-party sign-in",
p: "If you sign in with Google, Aura only requests your basic profile (name, email) — never your Google password, contacts, files, or anything beyond what's needed to identify your existing Aura account. We don't post to your Google account or access any other Google service on your behalf.",
},
{
h: "Data retention",
p: "Contact form submissions and account records are kept as long as needed to run the relevant Aura service, or until you ask us to delete them.",
},
{
h: "Your rights",
p: "You can ask what data we hold about you, ask us to correct it, or ask us to delete it, at any time — email ceo@auraajenticai.cloud and we'll handle it directly, no automated runaround.",
},
];
const PrivacyPage = () => (
<main>
<PageHero
eyebrow="Legal"
title="Privacy Policy"
sub="Last updated August 20, 2026. Short version: we collect what's needed to run Aura's services and respond to you, we don't sell your data, and you can ask us to delete it anytime."
/>
<section style={{ padding: "40px 0 120px" }}>
<div className="container" style={{ maxWidth: 760 }}>
<div style={{ display: "grid", gap: 32 }}>
{LEGAL_SECTIONS.map((s, i) => (
<div key={i}>
<h2 style={{ fontSize: 18, fontWeight: 600, marginBottom: 8 }}>{s.h}</h2>
<p style={{ fontSize: 14.5, lineHeight: 1.7, color: "var(--text-dim)" }}>{s.p}</p>
</div>
))}
</div>
</div>
</section>
</main>
);
const TermsPage = () => (
<main>
<PageHero
eyebrow="Legal"
title="Terms of Service"
sub="Last updated August 20, 2026. The short version: we scope and quote work before starting, deliver what we agree to, and either side can end an ongoing engagement with notice."
/>
<section style={{ padding: "40px 0 120px" }}>
<div className="container" style={{ maxWidth: 760 }}>
<div style={{ display: "grid", gap: 32 }}>
<div>
<h2 style={{ fontSize: 18, fontWeight: 600, marginBottom: 8 }}>Engagements</h2>
<p style={{ fontSize: 14.5, lineHeight: 1.7, color: "var(--text-dim)" }}>
Project work starts from a scoped proposal — timeline, deliverables, and price agreed
before any work begins. Ongoing services (like a managed WhatsApp bot or social
autopilot) run monthly and can be paused or cancelled with notice as set out in your
service agreement.
</p>
</div>
<div>
<h2 style={{ fontSize: 18, fontWeight: 600, marginBottom: 8 }}>Client accounts</h2>
<p style={{ fontSize: 14.5, lineHeight: 1.7, color: "var(--text-dim)" }}>
Access to the Aura client dashboard is provided to keep you informed on your own
projects, invoices, and services — it isn't a public sign-up product, and accounts are
provisioned by Aura's team for active clients.
</p>
</div>
<div>
<h2 style={{ fontSize: 18, fontWeight: 600, marginBottom: 8 }}>Questions</h2>
<p style={{ fontSize: 14.5, lineHeight: 1.7, color: "var(--text-dim)" }}>
Email ceo@auraajenticai.cloud for anything not covered here or in your specific project
agreement.
</p>
</div>
</div>
</div>
</section>
</main>
);
window.ServicesPage = ServicesPage; window.ServicesPage = ServicesPage;
window.StackPage = StackPage; window.StackPage = StackPage;
window.AgentsPage = AgentsPage; window.AgentsPage = AgentsPage;
@@ -1287,3 +1400,5 @@ window.PricingPage = PricingPage;
window.BlogPage = BlogPage; window.BlogPage = BlogPage;
window.ServiceDetailPage = ServiceDetailPage; window.ServiceDetailPage = ServiceDetailPage;
window.CaseStudiesPage = CaseStudiesPage; window.CaseStudiesPage = CaseStudiesPage;
window.PrivacyPage = PrivacyPage;
window.TermsPage = TermsPage;
+27 -21
View File
@@ -7,9 +7,16 @@ const colorMap = {
amber: { bg: "rgba(251, 191, 36, 0.08)", border: "rgba(251, 191, 36, 0.25)", text: "#fcd34d" }, amber: { bg: "rgba(251, 191, 36, 0.08)", border: "rgba(251, 191, 36, 0.25)", text: "#fcd34d" },
}; };
const ProjectCard = ({ p }) => { const PROJ_TXT = {
en: { liveUseCase: "Live Use Case", noRepo: "No repository linked", viewRepo: "View repository" },
bn: { liveUseCase: "লাইভ ব্যবহার দেখুন", noRepo: "রিপোজিটরি যুক্ত নেই", viewRepo: "রিপোজিটরি দেখুন" },
};
const ProjectCard = ({ p, lang = "en" }) => {
const tint = colorMap[p.color] || colorMap.violet; const tint = colorMap[p.color] || colorMap.violet;
const [hover, setHover] = React.useState(false); const [hover, setHover] = React.useState(false);
const t = PROJ_TXT[lang] || PROJ_TXT.en;
const bn = lang === "bn";
return ( return (
<article <article
@@ -64,7 +71,7 @@ const ProjectCard = ({ p }) => {
letterSpacing: "0.06em", letterSpacing: "0.06em",
}}> }}>
<span style={{ width: 6, height: 6, borderRadius: "50%", background: tint.text }} /> <span style={{ width: 6, height: 6, borderRadius: "50%", background: tint.text }} />
{p.kind} {bn ? p.kindBn : p.kind}
</div> </div>
<div style={{ <div style={{
position: "absolute", position: "absolute",
@@ -76,7 +83,7 @@ const ProjectCard = ({ p }) => {
background: tint.bg, background: tint.bg,
border: `1px solid ${tint.border}`, border: `1px solid ${tint.border}`,
borderRadius: 4, borderRadius: 4,
}}>{p.kind}</div> }}>{bn ? p.kindBn : p.kind}</div>
</div> </div>
<div style={{ padding: 24, position: "relative" }}> <div style={{ padding: 24, position: "relative" }}>
@@ -85,15 +92,7 @@ const ProjectCard = ({ p }) => {
fontSize: 20, fontSize: 20,
fontWeight: 500, fontWeight: 500,
letterSpacing: "-0.02em", letterSpacing: "-0.02em",
}}>{p.name}</h3> }}>{bn && p.nameBn ? p.nameBn : p.name}</h3>
{p.nameBn && (
<div style={{
marginTop: 4,
fontSize: 12,
color: "var(--text-faint)",
fontFamily: "var(--font-sans)",
}}>{p.nameBn}</div>
)}
<p style={{ <p style={{
marginTop: 12, marginTop: 12,
@@ -101,7 +100,7 @@ const ProjectCard = ({ p }) => {
fontSize: 14, fontSize: 14,
lineHeight: 1.55, lineHeight: 1.55,
color: "var(--text-dim)", color: "var(--text-dim)",
}}>{p.description}</p> }}>{bn && p.descriptionBn ? p.descriptionBn : p.description}</p>
{/* Stack badges */} {/* Stack badges */}
<div style={{ display: "flex", gap: 6, flexWrap: "wrap", marginBottom: 20 }}> <div style={{ display: "flex", gap: 6, flexWrap: "wrap", marginBottom: 20 }}>
@@ -153,7 +152,7 @@ const ProjectCard = ({ p }) => {
borderRadius: 8, borderRadius: 8,
color: "var(--text-dim)", color: "var(--text-dim)",
textDecoration: "none", textDecoration: "none",
}} title="View repository"><Icons.Github size={14} /></a> }} title={t.viewRepo}><Icons.Github size={14} /></a>
) : ( ) : (
<span style={{ <span style={{
width: 34, height: 34, width: 34, height: 34,
@@ -161,7 +160,7 @@ const ProjectCard = ({ p }) => {
border: "1px solid var(--line)", border: "1px solid var(--line)",
borderRadius: 8, borderRadius: 8,
color: "var(--line-strong)", color: "var(--line-strong)",
}} title="No repository linked"><Icons.Github size={14} /></span> }} title={t.noRepo}><Icons.Github size={14} /></span>
)} )}
{p.demo && ( {p.demo && (
<a href={p.demo} target="_blank" rel="noopener noreferrer" style={{ <a href={p.demo} target="_blank" rel="noopener noreferrer" style={{
@@ -175,7 +174,7 @@ const ProjectCard = ({ p }) => {
fontWeight: 500, fontWeight: 500,
textDecoration: "none", textDecoration: "none",
cursor: "pointer", cursor: "pointer",
}}>Demo <Icons.ArrowUpRight size={12} /></a> }}>{t.liveUseCase} <Icons.ArrowUpRight size={12} /></a>
)} )}
</div> </div>
</div> </div>
@@ -329,9 +328,12 @@ function mergeServices(local, apiData) {
}); });
} }
const Projects = () => { const PROJECTS_NUM_WORDS_BN = ['শূন্য','এক','দুই','তিন','চার','পাঁচ','ছয়','সাত','আট','নয়'];
const Projects = ({ lang = "en" }) => {
const D = PORTFOLIO_DATA; const D = PORTFOLIO_DATA;
const [services, setServices] = React.useState(D.services); const [services, setServices] = React.useState(D.services);
const bn = lang === "bn";
React.useEffect(() => { React.useEffect(() => {
const CACHE_KEY = 'aura_svc_v3'; const CACHE_KEY = 'aura_svc_v3';
@@ -361,10 +363,14 @@ const Projects = () => {
<section id="work" style={{ padding: "120px 0", borderTop: "1px solid var(--line)" }}> <section id="work" style={{ padding: "120px 0", borderTop: "1px solid var(--line)" }}>
<div className="container"> <div className="container">
<SectionHeader <SectionHeader
eyebrow="What we build" eyebrow={bn ? "আমরা যা বানাই" : "What we build"}
num={`03 / 06`} num={`03 / 06`}
title={<>{['Zero','One','Two','Three','Four','Five','Six','Seven','Eight','Nine'][services.length] || services.length} service{services.length !== 1 ? 's' : ''}. One team. All <span style={{ fontFamily: "var(--font-serif)", fontStyle: "italic", fontWeight: 400 }}>production-grade</span>.</>} title={bn
sub="From landing pages to AI agent runtimes — we take your idea from spec to live deployment." ? <>{PROJECTS_NUM_WORDS_BN[services.length] || services.length}টা সার্ভিস। একটাই টিম। সব <span style={{ fontFamily: "var(--font-serif)", fontStyle: "italic", fontWeight: 400 }}>প্রোডাকশন-গ্রেড</span>।</>
: <>{['Zero','One','Two','Three','Four','Five','Six','Seven','Eight','Nine'][services.length] || services.length} service{services.length !== 1 ? 's' : ''}. One team. All <span style={{ fontFamily: "var(--font-serif)", fontStyle: "italic", fontWeight: 400 }}>production-grade</span>.</>}
sub={bn
? "ল্যান্ডিং পেজ থেকে এআই এজেন্ট রানটাইম পর্যন্ত — আমরা আপনার আইডিয়া spec থেকে লাইভ ডিপ্লয়মেন্টে নিয়ে যাই।"
: "From landing pages to AI agent runtimes — we take your idea from spec to live deployment."}
/> />
<div style={{ <div style={{
@@ -372,7 +378,7 @@ const Projects = () => {
gridTemplateColumns: "repeat(2, 1fr)", gridTemplateColumns: "repeat(2, 1fr)",
gap: 16, gap: 16,
}} className="proj-grid"> }} className="proj-grid">
{services.map(p => <ProjectCard key={p.id} p={p} />)} {services.map(p => <ProjectCard key={p.id} p={p} lang={lang} />)}
</div> </div>
<style>{` <style>{`
+119 -76
View File
@@ -28,15 +28,48 @@ const SectionHeader = ({ eyebrow, title, sub, num }) => (
</div> </div>
); );
const About = () => { const ABOUT_TXT = {
en: {
eyebrow: "About",
title: <>We build the systems that act — not the demos that <span style={{ fontFamily: "var(--font-serif)", fontStyle: "italic", fontWeight: 400 }}>impress</span>.</>,
glance: "At a glance",
startConvo: "Start a conversation",
rows: [
["Discipline", "Agentic systems · Full-stack"],
["Stack range", "TS · Python · Solidity"],
["Working with", "Founders · CTOs · Platform leads"],
["Engagement", "Embedded · Lead architect"],
["Location", "Location"],
],
years: "shipping",
},
bn: {
eyebrow: "পরিচিতি",
title: <>আমরা এমন সিস্টেম বানাই যা কাজ করে — যে ডেমো শুধু <span style={{ fontFamily: "var(--font-serif)", fontStyle: "italic", fontWeight: 400 }}>মুগ্ধ করে</span> তা না।</>,
glance: "এক নজরে",
startConvo: "কথোপকথন শুরু করুন",
rows: [
["ডিসিপ্লিন", "এজেন্টিক সিস্টেম · ফুল-স্ট্যাক"],
["স্ট্যাক রেঞ্জ", "TS · Python · Solidity"],
["কাজ করি", "ফাউন্ডার · CTO · প্ল্যাটফর্ম লিড"],
["এনগেজমেন্ট", "এমবেডেড · লিড আর্কিটেক্ট"],
["লোকেশন", "Location"],
],
years: "শিপিং",
},
};
const About = ({ lang = "en" }) => {
const D = PORTFOLIO_DATA; const D = PORTFOLIO_DATA;
const bn = lang === "bn";
const t = ABOUT_TXT[lang] || ABOUT_TXT.en;
return ( return (
<section id="about" style={{ padding: "120px 0", borderTop: "1px solid var(--line)" }}> <section id="about" style={{ padding: "120px 0", borderTop: "1px solid var(--line)" }}>
<div className="container"> <div className="container">
<SectionHeader <SectionHeader
eyebrow="About" eyebrow={t.eyebrow}
num="01 / 06" num="01 / 06"
title={<>I architect the systems that act — not the demos that <span style={{ fontFamily: "var(--font-serif)", fontStyle: "italic", fontWeight: 400 }}>impress</span>.</>} title={t.title}
/> />
<div style={{ <div style={{
@@ -51,7 +84,7 @@ const About = () => {
lineHeight: 1.65, lineHeight: 1.65,
color: "var(--text-dim)", color: "var(--text-dim)",
margin: 0, margin: 0,
}}>{D.about.pitch}</p> }}>{bn ? D.about.pitchBn : D.about.pitch}</p>
<ul style={{ <ul style={{
marginTop: 32, marginTop: 32,
@@ -60,7 +93,7 @@ const About = () => {
display: "grid", display: "grid",
gap: 14, gap: 14,
}}> }}>
{D.about.bullets.map((b, i) => ( {(bn ? D.about.bulletsBn : D.about.bullets).map((b, i) => (
<li key={i} style={{ <li key={i} style={{
display: "flex", display: "flex",
gap: 14, gap: 14,
@@ -82,16 +115,23 @@ const About = () => {
{/* Side card: at a glance */} {/* Side card: at a glance */}
<div className="panel" style={{ padding: 28 }}> <div className="panel" style={{ padding: 28 }}>
<div className="eyebrow" style={{ marginBottom: 20 }}>At a glance</div> <div className="eyebrow" style={{ marginBottom: 20 }}>{t.glance}</div>
<div style={{ display: "grid", gap: 16 }}> <div style={{ display: "grid", gap: 16 }}>
{[ {(bn ? [
["ডিসিপ্লিন", "এজেন্টিক সিস্টেম · ফুল-স্ট্যাক"],
["প্রতিষ্ঠিত", D.brand.founded],
["স্ট্যাক রেঞ্জ", "TS · Python · Solidity"],
["কাজ করি", "ফাউন্ডার · CTO · প্ল্যাটফর্ম লিড"],
["ইনফ্রা", "নিজস্ব VPS · Coolify"],
["লোকেশন", D.brand.location],
] : [
["Discipline", "Agentic systems · Full-stack"], ["Discipline", "Agentic systems · Full-stack"],
["Years", `${D.brand.yearsExp}+ shipping`], ["Founded", D.brand.founded],
["Stack range", "TS · Python · Solidity"], ["Stack range", "TS · Python · Solidity"],
["Working with", "Founders · CTOs · Platform leads"], ["Working with", "Founders · CTOs · Platform leads"],
["Engagement", "Embedded · Lead architect"], ["Infra", "Own VPS · Coolify"],
["Location", D.brand.location], ["Location", D.brand.location],
].map(([k, v]) => ( ]).map(([k, v]) => (
<div key={k} style={{ <div key={k} style={{
display: "grid", display: "grid",
gridTemplateColumns: "110px 1fr", gridTemplateColumns: "110px 1fr",
@@ -113,7 +153,7 @@ const About = () => {
fontSize: 13, fontSize: 13,
color: "var(--accent)", color: "var(--accent)",
}}> }}>
Start a conversation <Icons.ArrowUpRight size={13} /> {t.startConvo} <Icons.ArrowUpRight size={13} />
</a> </a>
</div> </div>
</div> </div>
@@ -128,8 +168,17 @@ const About = () => {
); );
}; };
const Skills = () => { const CAT_BN = {
"Frontend": "ফ্রন্টএন্ড",
"Backend": "ব্যাকএন্ড",
"AI / Agents": "এআই / এজেন্ট",
"Web3": "ওয়েব৩",
"DevOps": "ডেভঅপস",
};
const Skills = ({ lang = "en" }) => {
const D = PORTFOLIO_DATA; const D = PORTFOLIO_DATA;
const bn = lang === "bn";
const cats = Object.keys(D.stack); const cats = Object.keys(D.stack);
const [active, setActive] = React.useState(cats[0]); const [active, setActive] = React.useState(cats[0]);
const items = D.stack[active]; const items = D.stack[active];
@@ -146,10 +195,10 @@ const Skills = () => {
<section id="stack" style={{ padding: "120px 0", borderTop: "1px solid var(--line)" }}> <section id="stack" style={{ padding: "120px 0", borderTop: "1px solid var(--line)" }}>
<div className="container"> <div className="container">
<SectionHeader <SectionHeader
eyebrow="Stack" eyebrow={bn ? "স্ট্যাক" : "Stack"}
num="02 / 06" num="02 / 06"
title="Tools I reach for, weighted by reps." title={bn ? "যেসব টুল দিয়ে আমরা বানাই।" : "The tools we build with."}
sub="Numbers are honest signal — not a vanity bar. They reflect production hours, not tutorials watched." sub={bn ? "আমাদের নিজেদের live প্রোডাক্টে (GT, Snehalata, Aura Platform) সত্যিই ব্যবহৃত — কোনো fake স্কিল-বার না।" : "What actually runs our own live products (GT, Snehalata, Aura Platform) — no fabricated skill bars, just the real list."}
/> />
{/* Category tabs */} {/* Category tabs */}
@@ -181,7 +230,7 @@ const Skills = () => {
fontWeight: 500, fontWeight: 500,
transition: "all 0.15s", transition: "all 0.15s",
}}> }}>
<I size={13} /> {c} <I size={13} /> {bn ? CAT_BN[c] || c : c}
</button> </button>
); );
})} })}
@@ -189,49 +238,20 @@ const Skills = () => {
{/* Items */} {/* Items */}
<div style={{ <div style={{
display: "grid", display: "flex",
gridTemplateColumns: "repeat(auto-fill, minmax(280px, 1fr))", flexWrap: "wrap",
gap: 12, gap: 10,
}}> }}>
{items.map((s, i) => ( {items.map((name, i) => (
<div key={s.name} className="panel" style={{ <div key={name} className="panel" style={{
padding: "20px 22px", padding: "12px 18px",
fontSize: 14, fontWeight: 500,
animation: `float-up 0.5s ${i * 0.05}s both`, animation: `float-up 0.5s ${i * 0.05}s both`,
}}> }}>
<div style={{ display: "flex", justifyContent: "space-between", alignItems: "baseline", marginBottom: 14 }}> {name}
<span style={{ fontSize: 14.5, fontWeight: 500 }}>{s.name}</span>
<span style={{
fontFamily: "var(--font-mono)",
fontSize: 11,
color: "var(--text-faint)",
}}>{s.level}</span>
</div>
<div style={{
height: 3,
background: "var(--line)",
borderRadius: 2,
overflow: "hidden",
position: "relative",
}}>
<div style={{
width: `${s.level}%`,
height: "100%",
background: "linear-gradient(90deg, var(--accent), var(--accent-2))",
borderRadius: 2,
animation: `grow-w 0.9s ${0.1 + i * 0.04}s both cubic-bezier(0.2,0.8,0.2,1)`,
transformOrigin: "left",
}} />
</div>
</div> </div>
))} ))}
</div> </div>
<style>{`
@keyframes grow-w {
from { transform: scaleX(0); }
to { transform: scaleX(1); }
}
`}</style>
</div> </div>
</section> </section>
); );
@@ -247,17 +267,33 @@ const TESTIMONIAL_COLORS = {
violet: { bg: "rgba(124,92,255,0.08)", border: "rgba(124,92,255,0.22)", text: "#a78bfa" }, violet: { bg: "rgba(124,92,255,0.08)", border: "rgba(124,92,255,0.22)", text: "#a78bfa" },
}; };
const Testimonials = () => { const Testimonials = ({ lang = "en" }) => {
const D = PORTFOLIO_DATA; const D = PORTFOLIO_DATA;
const bn = lang === "bn";
return ( return (
<section style={{ padding: "120px 0", borderTop: "1px solid var(--line)" }}> <section style={{ padding: "120px 0", borderTop: "1px solid var(--line)" }}>
<div className="container"> <div className="container">
<SectionHeader <SectionHeader
eyebrow="Client Results" eyebrow={bn ? "ক্লায়েন্ট ফলাফল" : "Client Results"}
num="05 / 06" num="05 / 06"
title={<>What clients say after we <span style={{ fontFamily: "var(--font-serif)", fontStyle: "italic", fontWeight: 400 }}>ship</span></>} title={bn
sub="Real projects. Real metrics. No stock-photo testimonials." ? <>শিপ করার পর ক্লায়েন্টরা যা <span style={{ fontFamily: "var(--font-serif)", fontStyle: "italic", fontWeight: 400 }}>বলে</span></>
: <>What clients say after we <span style={{ fontFamily: "var(--font-serif)", fontStyle: "italic", fontWeight: 400 }}>ship</span></>}
sub={bn ? "আসল প্রজেক্ট। আসল মেট্রিক্স। কোনো stock-photo testimonial না।" : "Real projects. Real metrics. No stock-photo testimonials."}
/> />
{D.testimonials.length === 0 ? (
<div className="panel" style={{
padding: "48px 32px",
textAlign: "center",
borderRadius: "var(--radius)",
}}>
<p style={{ margin: 0, fontSize: 16, color: "var(--text-dim)", lineHeight: 1.6 }}>
{bn
? "আমরা নতুন প্রডাক্ট শিপ করছি — কাস্টমার কেস স্টাডি ও ফলাফল শীঘ্রই আসছে।"
: "New customer deployments in progress — case studies and production metrics coming soon."}
</p>
</div>
) : (
<div style={{ <div style={{
display: "grid", display: "grid",
gridTemplateColumns: "repeat(2, 1fr)", gridTemplateColumns: "repeat(2, 1fr)",
@@ -283,7 +319,7 @@ const Testimonials = () => {
<p style={{ <p style={{
margin: "0 0 24px", fontSize: 15.5, margin: "0 0 24px", fontSize: 15.5,
lineHeight: 1.65, color: "var(--text)", lineHeight: 1.65, color: "var(--text)",
}}>{t.text}</p> }}>{bn && t.textBn ? t.textBn : t.text}</p>
<div style={{ display: "flex", alignItems: "center", gap: 12 }}> <div style={{ display: "flex", alignItems: "center", gap: 12 }}>
<div style={{ <div style={{
width: 40, height: 40, borderRadius: "50%", width: 40, height: 40, borderRadius: "50%",
@@ -311,6 +347,7 @@ const Testimonials = () => {
); );
})} })}
</div> </div>
)}
<style>{` <style>{`
@media (max-width: 720px) { @media (max-width: 720px) {
.testimonials-grid { grid-template-columns: 1fr !important; } .testimonials-grid { grid-template-columns: 1fr !important; }
@@ -331,7 +368,8 @@ const PRODUCT_COLORS = {
amber: { bg: "rgba(251,191,36,0.08)", border: "rgba(251,191,36,0.22)", text: "#fde68a" }, amber: { bg: "rgba(251,191,36,0.08)", border: "rgba(251,191,36,0.22)", text: "#fde68a" },
}; };
const OwnProductCard = ({ product }) => { const OwnProductCard = ({ product, lang = "en" }) => {
const bn = lang === "bn";
const c = PRODUCT_COLORS[product.color] || PRODUCT_COLORS.violet; const c = PRODUCT_COLORS[product.color] || PRODUCT_COLORS.violet;
return ( return (
<div className="reveal" style={{ <div className="reveal" style={{
@@ -364,7 +402,7 @@ const OwnProductCard = ({ product }) => {
boxShadow: "0 0 6px rgba(34,197,94,0.9)", display: "inline-block", boxShadow: "0 0 6px rgba(34,197,94,0.9)", display: "inline-block",
animation: "glamour-pulse 2s ease-in-out infinite", animation: "glamour-pulse 2s ease-in-out infinite",
}} /> }} />
LIVE {bn ? "লাইভ" : "LIVE"}
</span> </span>
{product.badge && ( {product.badge && (
<span style={{ <span style={{
@@ -378,7 +416,7 @@ const OwnProductCard = ({ product }) => {
padding: "3px 9px", borderRadius: 999, padding: "3px 9px", borderRadius: 999,
background: "var(--bg-elev)", border: "1px solid var(--line)", background: "var(--bg-elev)", border: "1px solid var(--line)",
marginLeft: "auto", marginLeft: "auto",
}}>Built by Aura</span> }}>{bn ? "Aura-র তৈরি" : "Built by Aura"}</span>
</div> </div>
{/* Brand name */} {/* Brand name */}
@@ -396,19 +434,19 @@ const OwnProductCard = ({ product }) => {
margin: 0, fontSize: 11.5, color: "var(--text-faint)", margin: 0, fontSize: 11.5, color: "var(--text-faint)",
fontFamily: "var(--font-mono)", letterSpacing: "0.1em", fontFamily: "var(--font-mono)", letterSpacing: "0.1em",
textTransform: "uppercase", textTransform: "uppercase",
}}>{product.tagline}</p> }}>{bn && product.taglineBn ? product.taglineBn : product.tagline}</p>
</div> </div>
</div> </div>
{/* Card body */} {/* Card body */}
<div style={{ padding: "28px 36px 32px", display: "flex", flexDirection: "column", gap: 20, flex: 1 }}> <div style={{ padding: "28px 36px 32px", display: "flex", flexDirection: "column", gap: 20, flex: 1 }}>
<p style={{ margin: 0, fontSize: 14.5, lineHeight: 1.65, color: "var(--text-dim)" }}> <p style={{ margin: 0, fontSize: 14.5, lineHeight: 1.65, color: "var(--text-dim)" }}>
{product.description} {bn && product.descriptionBn ? product.descriptionBn : product.description}
</p> </p>
{/* Top 3 features */} {/* Top 3 features */}
<div style={{ display: "grid", gap: 8 }}> <div style={{ display: "grid", gap: 8 }}>
{product.features.slice(0, 3).map((f, i) => ( {(bn && product.featuresBn ? product.featuresBn : product.features).slice(0, 3).map((f, i) => (
<div key={i} style={{ display: "flex", gap: 10, fontSize: 13, color: "var(--text)" }}> <div key={i} style={{ display: "flex", gap: 10, fontSize: 13, color: "var(--text)" }}>
<span style={{ color: c.text, flexShrink: 0, fontSize: 11, marginTop: 2 }}>✓</span> <span style={{ color: c.text, flexShrink: 0, fontSize: 11, marginTop: 2 }}>✓</span>
{f} {f}
@@ -416,7 +454,7 @@ const OwnProductCard = ({ product }) => {
))} ))}
{product.features.length > 3 && ( {product.features.length > 3 && (
<div style={{ fontSize: 12, color: "var(--text-faint)", fontFamily: "var(--font-mono)", paddingLeft: 21 }}> <div style={{ fontSize: 12, color: "var(--text-faint)", fontFamily: "var(--font-mono)", paddingLeft: 21 }}>
+{product.features.length - 3} more capabilities {bn ? `+${product.features.length - 3}টা আরও ক্ষমতা` : `+${product.features.length - 3} more capabilities`}
</div> </div>
)} )}
</div> </div>
@@ -451,7 +489,7 @@ const OwnProductCard = ({ product }) => {
<path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/> <path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/>
<polyline points="15,3 21,3 21,9"/><line x1="10" y1="14" x2="21" y2="3"/> <polyline points="15,3 21,3 21,9"/><line x1="10" y1="14" x2="21" y2="3"/>
</svg> </svg>
Visit → {bn ? "দেখুন →" : "Visit →"}
</a> </a>
<a href="#/services/web-app-dev" style={{ <a href="#/services/web-app-dev" style={{
display: "inline-flex", alignItems: "center", gap: 7, display: "inline-flex", alignItems: "center", gap: 7,
@@ -462,17 +500,18 @@ const OwnProductCard = ({ product }) => {
}} }}
onMouseEnter={e => e.currentTarget.style.background = c.bg} onMouseEnter={e => e.currentTarget.style.background = c.bg}
onMouseLeave={e => e.currentTarget.style.background = "transparent"} onMouseLeave={e => e.currentTarget.style.background = "transparent"}
>Build Mine →</a> >{bn ? "আমারটা বানান →" : "Build Mine →"}</a>
</div> </div>
</div> </div>
</div> </div>
); );
}; };
const FlagshipProduct = () => { const FlagshipProduct = ({ lang = "en" }) => {
const D = PORTFOLIO_DATA; const D = PORTFOLIO_DATA;
const products = D.ownProducts || []; const products = D.ownProducts || [];
if (!products.length) return null; if (!products.length) return null;
const bn = lang === "bn";
const rose = { bg: "rgba(244,63,94,0.08)", border: "rgba(244,63,94,0.22)", text: "#fda4af" }; const rose = { bg: "rgba(244,63,94,0.08)", border: "rgba(244,63,94,0.22)", text: "#fda4af" };
const violet = { bg: "rgba(124,92,255,0.08)", border: "rgba(124,92,255,0.22)", text: "#a78bfa" }; const violet = { bg: "rgba(124,92,255,0.08)", border: "rgba(124,92,255,0.22)", text: "#a78bfa" };
@@ -481,10 +520,14 @@ const FlagshipProduct = () => {
<section style={{ padding: "120px 0", borderTop: "1px solid var(--line)" }}> <section style={{ padding: "120px 0", borderTop: "1px solid var(--line)" }}>
<div className="container"> <div className="container">
<SectionHeader <SectionHeader
eyebrow="Our Own Products" eyebrow={bn ? "আমাদের নিজস্ব প্রোডাক্ট" : "Our Own Products"}
num="03.5 / 06" num="03.5 / 06"
title={<>We don't just build for clients — we build for <span style={{ fontFamily: "var(--font-serif)", fontStyle: "italic", fontWeight: 400 }}>ourselves.</span></>} title={bn
sub="These are Aura's own live products — real businesses we built, run, and grow. Visit them. That's exactly what we ship for you." ? <>আমরা শুধু ক্লায়েন্টদের জন্য বানাই না — নিজেদের জন্যও <span style={{ fontFamily: "var(--font-serif)", fontStyle: "italic", fontWeight: 400 }}>বানাই।</span></>
: <>We don't just build for clients — we build for <span style={{ fontFamily: "var(--font-serif)", fontStyle: "italic", fontWeight: 400 }}>ourselves.</span></>}
sub={bn
? "এগুলো Aura-র নিজস্ব লাইভ প্রোডাক্ট — আসল ব্যবসা যা আমরা বানিয়েছি, চালাই, বড় করছি। ঘুরে দেখুন। এটাই আমরা আপনার জন্য শিপ করি।"
: "These are Aura's own live products — real businesses we built, run, and grow. Visit them. That's exactly what we ship for you."}
/> />
{/* Products grid */} {/* Products grid */}
@@ -493,7 +536,7 @@ const FlagshipProduct = () => {
gridTemplateColumns: `repeat(${Math.min(products.length, 2)}, 1fr)`, gridTemplateColumns: `repeat(${Math.min(products.length, 2)}, 1fr)`,
gap: 20, gap: 20,
}}> }}>
{products.map(p => <OwnProductCard key={p.id} product={p} />)} {products.map(p => <OwnProductCard key={p.id} product={p} lang={lang} />)}
</div> </div>
{/* Bottom nudge */} {/* Bottom nudge */}
@@ -506,21 +549,21 @@ const FlagshipProduct = () => {
}}> }}>
<div> <div>
<span style={{ fontSize: 15, fontWeight: 500, color: "var(--text)" }}> <span style={{ fontSize: 15, fontWeight: 500, color: "var(--text)" }}>
Want Aura to build your product? {bn ? "Aura AI প্ল্যাটফর্ম দিয়ে আপনার সেলস অটোমেট করতে চান?" : "Ready to automate your e-commerce sales with Aura AI?"}
</span> </span>
<span style={{ <span style={{
display: "block", fontSize: 13, color: "var(--text-faint)", display: "block", fontSize: 13, color: "var(--text-faint)",
marginTop: 3, fontFamily: "var(--font-mono)", marginTop: 3, fontFamily: "var(--font-mono)",
}}> }}>
E-commerce · AI marketplace · SaaS — from $499 · Delivered in 2–4 weeks {bn ? "অটোনোমাস এআই সেলস এজেন্ট · কুরিয়ার MCP লজিস্টিকস · COD ফ্রড শিল্ড — $১৯/মাস থেকে শুরু" : "Autonomous AI Sales Agents · Courier MCP Logistics · COD Fraud Shield — from $19/mo"}
</span> </span>
</div> </div>
<a href="#/contact" style={{ <a href="#/pricing" style={{
padding: "11px 24px", padding: "11px 24px",
background: "var(--text)", color: "var(--bg)", background: "var(--text)", color: "var(--bg)",
borderRadius: 9, fontSize: 13.5, fontWeight: 500, borderRadius: 9, fontSize: 13.5, fontWeight: 500,
textDecoration: "none", whiteSpace: "nowrap", flexShrink: 0, textDecoration: "none", whiteSpace: "nowrap", flexShrink: 0,
}}>Start a Project →</a> }}>{bn ? "প্ল্যান দেখুন →" : "Explore Plans →"}</a>
</div> </div>
</div> </div>
+28 -153
View File
@@ -1,14 +1,15 @@
// Timeline + Contact + Footer // Timeline + Contact + Footer
const Timeline = () => { const Timeline = ({ lang = "en" }) => {
const D = PORTFOLIO_DATA; const D = PORTFOLIO_DATA;
const bn = lang === "bn";
return ( return (
<section id="timeline" style={{ padding: "120px 0", borderTop: "1px solid var(--line)" }}> <section id="timeline" style={{ padding: "120px 0", borderTop: "1px solid var(--line)" }}>
<div className="container"> <div className="container">
<SectionHeader <SectionHeader
eyebrow="Trajectory" eyebrow={bn ? "যাত্রাপথ" : "Trajectory"}
num="05 / 06" num="05 / 06"
title="Seven years, one through-line: shipping systems that work in production." title={bn ? "একটাই ধারা: প্রোডাকশনে কাজ করা স্বয়ংক্রিয় এআই সিস্টেম শিপ করা।" : "One through-line: shipping autonomous AI systems that work in production."}
/> />
<div style={{ position: "relative", paddingLeft: 32 }}> <div style={{ position: "relative", paddingLeft: 32 }}>
@@ -69,7 +70,7 @@ const Timeline = () => {
fontSize: 10.5, fontSize: 10.5,
color: "var(--text-dim)", color: "var(--text-dim)",
fontFamily: "var(--font-mono)", fontFamily: "var(--font-mono)",
}}>{e.kind}</span> }}>{bn ? e.kindBn : e.kind}</span>
</div> </div>
<div> <div>
<h3 style={{ <h3 style={{
@@ -77,7 +78,7 @@ const Timeline = () => {
fontSize: 19, fontSize: 19,
fontWeight: 500, fontWeight: 500,
letterSpacing: "-0.01em", letterSpacing: "-0.01em",
}}>{e.role}</h3> }}>{bn ? e.roleBn : e.role}</h3>
<div style={{ <div style={{
marginTop: 4, marginTop: 4,
fontSize: 14, fontSize: 14,
@@ -90,7 +91,7 @@ const Timeline = () => {
lineHeight: 1.6, lineHeight: 1.6,
color: "var(--text-dim)", color: "var(--text-dim)",
maxWidth: 600, maxWidth: 600,
}}>{e.detail}</p> }}>{bn ? e.detailBn : e.detail}</p>
</div> </div>
</div> </div>
</div> </div>
@@ -160,7 +161,7 @@ const Contact = ({ lang = "en" }) => {
setStatus("sent"); setStatus("sent");
} catch { } catch {
setStatus("idle"); setStatus("idle");
setErrors({ message: "Network error — please email us directly at hello@auraajenticai.cloud" }); setErrors({ message: "Network error — please email us directly at ceo@auraajenticai.cloud" });
} }
}; };
@@ -337,6 +338,17 @@ const Contact = ({ lang = "en" }) => {
}}> }}>
<Icons.Mail size={18} /> {D.brand.email} <Icons.Mail size={18} /> {D.brand.email}
</a> </a>
<a href={`https://wa.me/${D.brand.whatsapp}`} target="_blank" rel="noopener noreferrer" style={{
fontSize: 15,
fontWeight: 500,
display: "inline-flex",
alignItems: "center",
gap: 10,
marginTop: 12,
color: "#25D366",
}}>
<Icons.WhatsApp size={16} /> +{D.brand.whatsapp.replace(/^(\d{3})(\d{4})(\d{6})$/, "$1 $2-$3")}
</a>
<div style={{ marginTop: 24, display: "flex", gap: 8 }}> <div style={{ marginTop: 24, display: "flex", gap: 8 }}>
{[ {[
{ i: Icons.Github, l: "GitHub", h: D.brand.socials.github }, { i: Icons.Github, l: "GitHub", h: D.brand.socials.github },
@@ -358,7 +370,7 @@ const Contact = ({ lang = "en" }) => {
</div> </div>
</div> </div>
<ChatbotWidget />
</div> </div>
</div> </div>
<style>{` <style>{`
@@ -371,152 +383,11 @@ const Contact = ({ lang = "en" }) => {
); );
}; };
const ChatbotWidget = () => { const ChatbotWidget = () => null;
const [msgs, setMsgs] = React.useState([
{ role: "bot", text: "Ask me anything about the work — projects, stack choices, timelines." },
]);
const [input, setInput] = React.useState("");
const [thinking, setThinking] = React.useState(false);
const scrollRef = React.useRef(null);
React.useEffect(() => { const Footer = ({ lang = "en" }) => {
if (scrollRef.current) scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
}, [msgs, thinking]);
const reply = async (q) => {
setThinking(true);
try {
const text = await window.claude.complete(
`You are a concise portfolio assistant for Aura, a senior agentic AI & full-stack engineer with 7+ years experience. Domains: AI agents, Web3, MLM/EA dashboards, full-stack. Answer in 1-3 sentences, professional but friendly. Question: ${q}`
);
setMsgs(m => [...m, { role: "bot", text }]);
} catch (e) {
setMsgs(m => [...m, { role: "bot", text: "Aura's offline — drop a note via the form and I'll reply within 48h." }]);
}
setThinking(false);
};
const send = () => {
const q = input.trim();
if (!q) return;
setMsgs(m => [...m, { role: "user", text: q }]);
setInput("");
reply(q);
};
return (
<div className="panel" style={{ padding: 0, overflow: "hidden" }}>
<div style={{
padding: "16px 20px",
borderBottom: "1px solid var(--line)",
display: "flex",
alignItems: "center",
gap: 10,
}}>
<div style={{
width: 28, height: 28,
display: "grid", placeItems: "center",
borderRadius: 7,
background: "var(--accent-glow)",
color: "var(--accent)",
}}><Icons.Sparkles size={14} /></div>
<div>
<div style={{ fontSize: 13.5, fontWeight: 500 }}>Ask about my work</div>
<div style={{ fontSize: 11, color: "var(--text-faint)", fontFamily: "var(--font-mono)" }}>powered by claude · live</div>
</div>
<span style={{
marginLeft: "auto",
fontSize: 10.5,
padding: "2px 8px",
background: "color-mix(in srgb, var(--good) 15%, transparent)",
color: "var(--good)",
border: "1px solid color-mix(in srgb, var(--good) 30%, transparent)",
borderRadius: 999,
fontFamily: "var(--font-mono)",
textTransform: "uppercase",
letterSpacing: "0.06em",
}}>online</span>
</div>
<div ref={scrollRef} style={{
padding: 16,
height: 200,
overflowY: "auto",
display: "flex",
flexDirection: "column",
gap: 10,
fontSize: 13,
}}>
{msgs.map((m, i) => (
<div key={i} style={{
alignSelf: m.role === "user" ? "flex-end" : "flex-start",
maxWidth: "85%",
padding: "8px 12px",
background: m.role === "user" ? "var(--accent)" : "var(--bg-elev)",
color: m.role === "user" ? "white" : "var(--text)",
border: m.role === "user" ? "none" : "1px solid var(--line)",
borderRadius: 12,
lineHeight: 1.5,
}}>{m.text}</div>
))}
{thinking && (
<div style={{
alignSelf: "flex-start",
padding: "8px 12px",
background: "var(--bg-elev)",
border: "1px solid var(--line)",
borderRadius: 12,
display: "flex", gap: 4, alignItems: "center",
}}>
{[0,1,2].map(i => (
<span key={i} style={{
width: 5, height: 5, borderRadius: "50%",
background: "var(--text-faint)",
animation: `pulse-dot 1.2s ${i * 0.15}s infinite`,
}} />
))}
</div>
)}
</div>
<form onSubmit={(e) => { e.preventDefault(); send(); }} style={{
display: "flex",
gap: 8,
padding: 12,
borderTop: "1px solid var(--line)",
background: "var(--bg-elev)",
}}>
<input
value={input}
onChange={(e) => setInput(e.target.value)}
placeholder="Ask about a project, stack, or timeline…"
style={{
flex: 1,
background: "var(--bg-card)",
color: "var(--text)",
border: "1px solid var(--line)",
borderRadius: 8,
padding: "9px 12px",
fontSize: 13,
fontFamily: "inherit",
outline: "none",
}}
/>
<button type="submit" style={{
padding: "0 12px",
background: "var(--text)",
color: "var(--bg)",
border: "none",
borderRadius: 8,
fontSize: 12,
fontWeight: 500,
display: "flex", alignItems: "center", gap: 6,
}}><Icons.Send size={12} /></button>
</form>
</div>
);
};
const Footer = () => {
const D = PORTFOLIO_DATA; const D = PORTFOLIO_DATA;
const bn = lang === "bn";
return ( return (
<footer style={{ <footer style={{
borderTop: "1px solid var(--line)", borderTop: "1px solid var(--line)",
@@ -533,8 +404,12 @@ const Footer = () => {
<Icons.Logo size={22} /> <Icons.Logo size={22} />
<span style={{ fontSize: 13, color: "var(--text-dim)" }}>{D.brand.name} · {D.brand.domain}</span> <span style={{ fontSize: 13, color: "var(--text-dim)" }}>{D.brand.name} · {D.brand.domain}</span>
</div> </div>
<div style={{ display: "flex", alignItems: "center", gap: 20 }}>
<a href="#/privacy" style={{ fontSize: 12.5, color: "var(--text-dim)" }}>{bn ? "প্রাইভেসি" : "Privacy"}</a>
<a href="#/terms" style={{ fontSize: 12.5, color: "var(--text-dim)" }}>{bn ? "শর্তাবলী" : "Terms"}</a>
<div style={{ fontSize: 12, color: "var(--text-faint)", fontFamily: "var(--font-mono)" }}> <div style={{ fontSize: 12, color: "var(--text-faint)", fontFamily: "var(--font-mono)" }}>
© 2026 — Built with intent. {bn ? "© ২০২৬ — যত্ন করে তৈরি।" : "© 2026 — Built with intent."}
</div>
</div> </div>
</div> </div>
</footer> </footer>
+81
View File
@@ -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
View File
@@ -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
View File
@@ -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"
} }
] ]
} }