d84cb28d0b
snehalata.com domain not yet registered — use production Vercel URL until custom domain is configured. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
439 lines
22 KiB
React
439 lines
22 KiB
React
// Content for the portfolio
|
||
const PORTFOLIO_DATA = {
|
||
brand: {
|
||
name: "Aura Agentic AI",
|
||
handle: "@aura",
|
||
title: "Agentic AI & Full-Stack Development",
|
||
titleBn: "এজেন্টিক এআই ও ফুল-স্ট্যাক ডেভেলপমেন্ট",
|
||
tagline: "We build AI agents, automation & enterprise systems that work 24/7.",
|
||
taglineBn: "আমরা AI এজেন্ট, অটোমেশন ও এন্টারপ্রাইজ সিস্টেম তৈরি করি যা ২৪/৭ কাজ করে।",
|
||
location: "Dhaka, Bangladesh · Remote",
|
||
yearsExp: 7,
|
||
email: "hello@auraajenticai.cloud",
|
||
domain: "auraajenticai.cloud",
|
||
socials: {
|
||
github: "https://github.com",
|
||
linkedin: "https://linkedin.com",
|
||
twitter: "https://twitter.com",
|
||
},
|
||
},
|
||
|
||
metrics: [
|
||
{ label: "Years shipping", value: "7+" },
|
||
{ label: "Agents in production", value: "40+" },
|
||
{ label: "Enterprise clients", value: "12" },
|
||
{ label: "Uptime maintained", value: "99.98%" },
|
||
],
|
||
|
||
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.",
|
||
bullets: [
|
||
"Designed agent runtimes for fintech & MLM platforms moving 8-figure GMV",
|
||
"Built orchestration layers across OpenAI, Anthropic, vLLM, and self-hosted models",
|
||
"Shipped Web3 settlement rails — wallets, signers, on-chain audit trails",
|
||
"Lead architect on three SaaS dashboards now serving 50k+ daily users",
|
||
],
|
||
},
|
||
|
||
stack: {
|
||
Frontend: [
|
||
{ name: "React", level: 98 },
|
||
{ name: "Next.js", level: 96 },
|
||
{ name: "TypeScript", level: 95 },
|
||
{ name: "Tailwind", level: 94 },
|
||
{ 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: [
|
||
{
|
||
id: "web-app-dev",
|
||
name: "Website & Webapp Development",
|
||
nameBn: "ওয়েবসাইট ও ওয়েবঅ্যাপ ডেভেলপমেন্ট",
|
||
kind: "Core Service",
|
||
description:
|
||
"From landing pages to full SaaS dashboards — pixel-perfect, fast, and built to scale. SvelteKit, Next.js, React, Tailwind.",
|
||
stack: ["SvelteKit", "Next.js", "React", "Tailwind", "PostgreSQL"],
|
||
impact: { primary: "50k+", secondary: "daily users served" },
|
||
color: "violet",
|
||
demo: "https://glamourstouch.com",
|
||
},
|
||
{
|
||
id: "ai-agent-automation",
|
||
name: "AI Agent & Automation",
|
||
nameBn: "এআই এজেন্ট ও অটোমেশন",
|
||
kind: "Core Service",
|
||
description:
|
||
"Custom AI agents that triage, decide, and execute — integrated with your tools via n8n, Anthropic, and OpenAI.",
|
||
stack: ["Anthropic Claude", "n8n", "LangGraph", "Node.js", "Hono"],
|
||
impact: { primary: "1.2M+", secondary: "agent runs / month" },
|
||
color: "cyan",
|
||
demo: "https://demo-agenticai-website.vercel.app",
|
||
},
|
||
{
|
||
id: "web3-blockchain",
|
||
name: "Web3 & Blockchain",
|
||
nameBn: "ওয়েব৩ ও ব্লকচেইন",
|
||
kind: "Specialist Service",
|
||
description:
|
||
"Wallets, smart contracts, multi-chain bridges, and on-chain audit trails. Gasless UX that hides complexity from end users.",
|
||
stack: ["Solidity", "viem", "wagmi", "Cloudflare Workers"],
|
||
impact: { primary: "12 chains", secondary: "EVM + Solana" },
|
||
color: "green",
|
||
demo: "https://demo-cryptotradeanalysis-website.vercel.app",
|
||
},
|
||
{
|
||
id: "mt5-ea-trading",
|
||
name: "MT5 EA & Trading Automation",
|
||
nameBn: "MT5 EA ও ট্রেডিং অটোমেশন",
|
||
kind: "Specialist Service",
|
||
description:
|
||
"Expert Advisors, real-time P&L dashboards, risk envelopes, and one-click kill switches for MetaTrader 5 platforms.",
|
||
stack: ["MQL5", "Go", "ClickHouse", "WebSockets", "React"],
|
||
impact: { primary: "<80ms", secondary: "tick-to-render latency" },
|
||
color: "amber",
|
||
demo: "https://ea-dashboard-blush.vercel.app",
|
||
},
|
||
{
|
||
id: "scraping-data-pipeline",
|
||
name: "Browser Scraping & Data Pipeline",
|
||
nameBn: "ব্রাউজার স্ক্র্যাপিং ও ডেটা পাইপলাইন",
|
||
kind: "Specialist Service",
|
||
description:
|
||
"Playwright/Puppeteer scrapers, proxy rotation, structured data extraction, and ETL pipelines into your DB or warehouse.",
|
||
stack: ["Playwright", "Puppeteer", "Python", "Airflow", "PostgreSQL"],
|
||
impact: { primary: "10M+", secondary: "records extracted / month" },
|
||
color: "violet",
|
||
demo: "https://portfolio-website-tan-six-24.vercel.app",
|
||
},
|
||
{
|
||
id: "infra-devops",
|
||
name: "Infrastructure & DevOps",
|
||
nameBn: "ইনফ্রাস্ট্রাকচার ও ডেভঅপস",
|
||
kind: "Specialist Service",
|
||
description:
|
||
"VPS setup, Docker, Coolify, Traefik, CI/CD pipelines, SSL, monitoring, and zero-downtime deploys on your own cloud.",
|
||
stack: ["Docker", "Coolify", "Traefik", "GitHub Actions", "PostgreSQL"],
|
||
impact: { primary: "99.98%", secondary: "uptime maintained" },
|
||
color: "cyan",
|
||
},
|
||
{
|
||
id: "meta-ads-ai",
|
||
name: "AI-Powered Meta Ads",
|
||
nameBn: "এআই-চালিত মেটা অ্যাডস",
|
||
kind: "Growth Service",
|
||
badge: "NEW · Meta MCP",
|
||
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.",
|
||
stack: ["Meta MCP", "Meta Ads API", "n8n", "Claude AI", "Anthropic"],
|
||
impact: { primary: "5×", secondary: "ROAS vs. manual management" },
|
||
color: "rose",
|
||
highlights: [
|
||
"Real-time bid & budget optimization every 15 min",
|
||
"100+ ad variants A/B tested simultaneously by AI",
|
||
"Automated audience expansion & lookalike generation",
|
||
"Creative fatigue detection — pauses before burnout",
|
||
"Daily AI-written performance reports to your inbox",
|
||
"Full Meta API access via official MCP integration",
|
||
],
|
||
},
|
||
],
|
||
|
||
testimonials: [
|
||
{
|
||
name: "Fahim Rahman",
|
||
role: "CTO",
|
||
company: "FinSync BD",
|
||
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: [
|
||
{
|
||
name: "Starter",
|
||
badge: null,
|
||
price: 499,
|
||
period: "one-time",
|
||
description: "For founders who need a fast, professional launch.",
|
||
color: "violet",
|
||
features: [
|
||
"Landing page or single-service site",
|
||
"Mobile responsive + dark/light mode",
|
||
"Contact form with real email",
|
||
"1 API or third-party integration",
|
||
"Deployed on your domain",
|
||
"1 revision round",
|
||
"14-day support window",
|
||
],
|
||
cta: "Get Started",
|
||
href: "mailto:hello@auraajenticai.cloud?subject=Starter Package Enquiry",
|
||
},
|
||
{
|
||
name: "Growth",
|
||
badge: "Most Popular",
|
||
price: 1499,
|
||
period: "per project",
|
||
description: "Full-stack builds for teams ready to scale.",
|
||
color: "cyan",
|
||
features: [
|
||
"Full SaaS dashboard or complex webapp",
|
||
"AI agent or automation integration",
|
||
"Admin dashboard + public API",
|
||
"Auth, billing & role-based access",
|
||
"CI/CD pipeline + VPS deployment",
|
||
"3 revision rounds",
|
||
"60-day support window",
|
||
"Performance monitoring setup",
|
||
],
|
||
cta: "Start Project",
|
||
href: "mailto:hello@auraajenticai.cloud?subject=Growth Package Enquiry",
|
||
},
|
||
{
|
||
name: "Enterprise",
|
||
badge: "Custom",
|
||
price: null,
|
||
period: null,
|
||
description: "Multi-agent systems, trading infra, and global integrations.",
|
||
color: "amber",
|
||
features: [
|
||
"Custom architecture design",
|
||
"Multi-agent orchestration system",
|
||
"MT5 EA or Meta Ads AI system",
|
||
"Web3 / on-chain settlement rails",
|
||
"Dedicated VPS infrastructure",
|
||
"Unlimited revisions",
|
||
"6-month SLA support",
|
||
"Monthly performance reports",
|
||
"Direct engineer access via Slack",
|
||
],
|
||
cta: "Book a Call",
|
||
href: "mailto:hello@auraajenticai.cloud?subject=Enterprise Enquiry",
|
||
},
|
||
],
|
||
|
||
blogArticles: [
|
||
{
|
||
slug: "how-we-build-mt5-eas",
|
||
title: "How We Build MT5 Expert Advisors That Don't Blow Accounts",
|
||
date: "May 20, 2026",
|
||
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: [
|
||
{ t: 0, kind: "system", text: "agent.session :: id=run_8af3e2 model=claude-sonnet-4.5" },
|
||
{ t: 350, kind: "user", text: 'task: "Reconcile yesterday\'s payouts. Flag anything > $5k or > 3σ from the cohort baseline."' },
|
||
{ t: 1200, kind: "thought", text: "Decompose → fetch payouts, compute cohort baseline (μ, σ), filter, draft reconciliation note." },
|
||
{ t: 1900, kind: "tool", tool: "postgres.query", text: "SELECT id, member_id, amount, created_at FROM payouts WHERE day = $1", status: "ok", meta: "1,284 rows · 42ms" },
|
||
{ t: 2700, kind: "tool", tool: "math.stats", text: "compute(μ=412.30, σ=187.40, n=1284)", status: "ok", meta: "8ms" },
|
||
{ t: 3400, kind: "tool", tool: "slack.notify", text: '#finance-ops · "12 outliers flagged for review"', status: "ok", meta: "delivered" },
|
||
{ t: 4100, kind: "thought", text: "All checks passed. Drafting reconciliation summary for the CFO digest." },
|
||
{ t: 4900, kind: "output", text: "Reconciliation complete. 12 outliers flagged · 1 above-threshold (member_4419 · $7,420). Audit trail written." },
|
||
{ t: 5400, kind: "system", text: "session.end :: tokens=8,412 · cost=$0.083 · duration=5.4s" },
|
||
],
|
||
|
||
ownProducts: [
|
||
{
|
||
id: "snehalata",
|
||
name: "Snehalata",
|
||
tagline: "AI-Powered Clothing Ecosystem",
|
||
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.",
|
||
url: "https://snehalata-ecosystem-aura-ai-clothing-qyyhwhpz5.vercel.app",
|
||
badge: "Ecosystem",
|
||
stack: ["SvelteKit", "Supabase", "Gemini AI", "Tailwind", "Vercel"],
|
||
features: [
|
||
"Multi-vendor marketplace with AI-powered vendor onboarding audit",
|
||
"Gemini-powered virtual try-on and style transfer for every product",
|
||
"24/7 Bengali AI chat assistant for shopping guidance",
|
||
"Bangladesh district-level vendor & product filtering",
|
||
"Full order lifecycle: placement → quality check → delivery tracking",
|
||
"CEO & vendor dashboards with real-time ecosystem stats",
|
||
],
|
||
color: "violet",
|
||
},
|
||
{
|
||
id: "glamourstouch",
|
||
name: "Glamours Touch",
|
||
tagline: "Beauty & Lifestyle E-Commerce",
|
||
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.",
|
||
url: "https://glamourstouch.com",
|
||
badge: "Live Product",
|
||
stack: ["Next.js", "Stripe", "PostgreSQL", "Tailwind", "Vercel"],
|
||
features: [
|
||
"Full product catalog with variants & inventory management",
|
||
"Stripe + local payment gateway integration",
|
||
"Mobile-first responsive storefront design",
|
||
"Admin dashboard for orders, products & analytics",
|
||
"SEO-optimized product pages with structured data",
|
||
"Real-time stock tracking & secure checkout flow",
|
||
],
|
||
color: "rose",
|
||
},
|
||
],
|
||
|
||
experience: [
|
||
{
|
||
year: "2024 — Present",
|
||
role: "Founder & Principal Engineer",
|
||
company: "Aura Agentic Cloud",
|
||
kind: "Product",
|
||
detail: "Building the agent runtime layer — orchestration, evals, observability — used by 12 enterprise teams.",
|
||
},
|
||
{
|
||
year: "2022 — 2024",
|
||
role: "Staff Full-Stack Engineer",
|
||
company: "Confidential · Fintech",
|
||
kind: "Contract",
|
||
detail: "Led the rebuild of an MLM compensation engine, ran the migration from monolith to multi-tenant.",
|
||
},
|
||
{
|
||
year: "2021 — 2022",
|
||
role: "Senior Engineer · Web3",
|
||
company: "Stealth DeFi protocol",
|
||
kind: "Contract",
|
||
detail: "Wallet UX, signer abstraction, on-chain settlement rails. Shipped before the protocol announced.",
|
||
},
|
||
{
|
||
year: "2019 — 2021",
|
||
role: "Full-Stack Engineer",
|
||
company: "Series-B SaaS",
|
||
kind: "Full-time",
|
||
detail: "Owned the dashboard surface area — billing, RBAC, integrations. Pushed app from 4k to 28k DAU.",
|
||
},
|
||
{
|
||
year: "2018 — 2019",
|
||
role: "Software Engineer",
|
||
company: "Agency · Remote",
|
||
kind: "Full-time",
|
||
detail: "Cut my teeth shipping React + Node products across e-commerce, logistics, and edtech.",
|
||
},
|
||
],
|
||
};
|
||
|
||
window.PORTFOLIO_DATA = PORTFOLIO_DATA;
|