diff --git a/index.html b/index.html index 94536ff..7a67700 100644 --- a/index.html +++ b/index.html @@ -313,18 +313,18 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + diff --git a/src/app.jsx b/src/app.jsx index 231a108..68089cc 100644 --- a/src/app.jsx +++ b/src/app.jsx @@ -103,6 +103,10 @@ function App() { 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.', }, + 'case-studies': { + 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.', + }, pricing: { title: `Pricing — ${BASE}`, desc: 'Transparent pricing for AI agents, automation, and full-stack development. Starter, Growth, and Enterprise tiers. Fixed scope, no surprises.', @@ -174,6 +178,8 @@ function App() { return ; case 'blog': return ; + case 'case-studies': + return ; default: return (
diff --git a/src/data.jsx b/src/data.jsx index be1d189..ee3ee46 100644 --- a/src/data.jsx +++ b/src/data.jsx @@ -396,6 +396,129 @@ const PORTFOLIO_DATA = { }, ], + caseStudies: [ + { + slug: "finsync-ai-reconciliation", + service: "AI Agent & Automation", + serviceId: "ai-agent-automation", + 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" }, + }, + ], + experience: [ { year: "2024 — Present", diff --git a/src/nav.jsx b/src/nav.jsx index f91259a..8d3dd74 100644 --- a/src/nav.jsx +++ b/src/nav.jsx @@ -1,9 +1,9 @@ // Top nav — minimal, sticky, blurred — mobile-responsive const NAV_LINKS = [ { id: "services", label: "Services", url: "#/services" }, + { id: "case-studies", label: "Case Studies", url: "#/case-studies" }, { id: "pricing", label: "Pricing", url: "#/pricing" }, { id: "blog", label: "Blog", url: "#/blog" }, - { id: "timeline", label: "Timeline", url: "#/timeline" }, { id: "contact", label: "Contact", url: "#/contact" }, ] diff --git a/src/pages.jsx b/src/pages.jsx index 2e7906f..5186144 100644 --- a/src/pages.jsx +++ b/src/pages.jsx @@ -1072,6 +1072,212 @@ const ServiceDetailPage = ({ svc }) => { ); }; +// ─── CASE STUDIES PAGE ─────────────────────────────────────────────────────── + +const CASE_COLORS = { + cyan: { bg: "rgba(0,212,255,0.07)", border: "rgba(0,212,255,0.20)", text: "#67e8f9" }, + amber: { bg: "rgba(251,191,36,0.08)", border: "rgba(251,191,36,0.22)", text: "#fde68a" }, + rose: { bg: "rgba(244,63,94,0.08)", border: "rgba(244,63,94,0.22)", text: "#fda4af" }, + green: { bg: "rgba(34,197,94,0.07)", border: "rgba(34,197,94,0.20)", text: "#86efac" }, + violet: { bg: "rgba(124,92,255,0.08)", border: "rgba(124,92,255,0.22)", text: "#a78bfa" }, +}; + +const CaseStudyDetail = ({ cs, onBack }) => { + const c = CASE_COLORS[cs.color] || CASE_COLORS.cyan; + return ( +
+
+
+ + +
+ {cs.service} + + {cs.clientType} · {cs.timeline} + +
+ +

{cs.title}

+ + {/* Results hero */} +
+ {cs.results.map((r, i) => ( +
+
{r.metric}
+
{r.label}
+
+ ))} +
+ + {/* Challenge */} +
+

The Challenge

+

{cs.challenge}

+
+ + {/* Solution */} +
+

What We Built

+

{cs.solution}

+
+ + {/* Stack */} +
+

Stack

+
+ {cs.stack.map(s => ( + {s} + ))} +
+
+ + {/* Quote */} + {cs.quote && ( +
+
"
+

{cs.quote.text}

+ {cs.quote.author} +
+ )} + + {/* CTA */} +
+
+

Want similar results?

+

+ Describe your project — we respond within 24h with a scoped proposal. +

+
+ Start a Project → +
+
+
+ +
+ ); +}; + +const CaseStudiesPage = () => { + const D = PORTFOLIO_DATA; + const [active, setActive] = React.useState(null); + const cases = D.caseStudies || []; + + const cs = active ? cases.find(c => c.slug === active) : null; + if (cs) return setActive(null)} />; + + return ( +
+ Real projects. Real results.} + sub="Every case study is a production system — running live, serving real users, generating real metrics. No mock-ups." + /> +
+
+
+ {cases.map((cs, i) => { + const c = CASE_COLORS[cs.color] || CASE_COLORS.cyan; + return ( +
setActive(cs.slug)} + style={{ + background: "var(--bg-card)", border: "1px solid var(--line)", + borderRadius: "var(--radius)", padding: "32px 36px", + cursor: "pointer", transition: "border-color 0.2s, background 0.2s", + }} + onMouseEnter={e => { e.currentTarget.style.borderColor = c.border; e.currentTarget.style.background = c.bg; }} + onMouseLeave={e => { e.currentTarget.style.borderColor = "var(--line)"; e.currentTarget.style.background = "var(--bg-card)"; }} + > +
+
+
+ {cs.service} + {cs.clientType} +
+

+ {cs.title} +

+

+ {cs.challenge.slice(0, 140)}… +

+
+ + {/* Key metric highlight */} +
+
{cs.results[0].metric}
+
{cs.results[0].label}
+
+
+ + {/* Mini results row */} +
+ {cs.results.slice(1).map((r, ri) => ( +
+ {r.metric} + {r.label} +
+ ))} + +
+
+ ); + })} +
+
+
+
+ ); +}; + window.ServicesPage = ServicesPage; window.StackPage = StackPage; window.AgentsPage = AgentsPage; @@ -1080,3 +1286,4 @@ window.ContactPage = ContactPage; window.PricingPage = PricingPage; window.BlogPage = BlogPage; window.ServiceDetailPage = ServiceDetailPage; +window.CaseStudiesPage = CaseStudiesPage;