Skip to content
HomeAt Splunk, that means pairing React product work with Python services, operational data, permissions, evaluation, and release controls. Earlier at Deloitte, I built extraction, storage, API, and visualization systems; two removed more than 36,000 hours of annual manual work and cut investment-processing time by 66%.WritingArticles and notes on software engineering, AI engineering, system design, and the trade-offs behind production systems.ProjectsSelected systems, the constraints that shaped them, and the trade-offs I would revisit.Abdul AhadI’m an AI full-stack engineer with more than five years of experience building data-intensive enterprise software and production AI systems. At Splunk, I drove AI Service and KPI Discovery from an early prototype through technical design, validation, and production delivery. The capability analyzes operational data and recommends service models and health signals within Splunk IT Service Intelligence.ContactIf you’re hiring for a role, comparing architecture options, or building something with a difficult failure mode, send enough context to make the conversation useful.ColophonHow this portfolio handles static publishing, search, contact delivery, analytics, and releases.Capacity Planning Before Architecture DiagramsA practical method for turning workload assumptions into request, storage, bandwidth, concurrency, and failure-capacity budgets before choosing an architecture.Design Modules Around Change, Not LayersA practical guide to information hiding, volatile decisions, coupling, cohesion, dependency direction, and avoiding abstractions that preserve the wrong boundaries.From Model Call to Reliable AI WorkflowHow one model request grows into retrieval, tools, deterministic workflows, agents, evaluation, observability, and human escalation.Queues, Backpressure, and Idempotency: Designing for FailureHow bounded queues, admission control, idempotency keys, retry budgets, and dead-letter handling turn asynchronous delivery into a controlled reliability system.Refactoring a Legacy Backend Without a Big-Bang RewriteA staged method for understanding, testing, isolating, replacing, observing, and finally deleting legacy backend behavior without one irreversible cutover.MCP in Production: Trust Boundaries, Permissions, and Tool DesignA production-focused guide to MCP hosts, clients, servers, capability discovery, authorization, consent, token audiences, and safely designed tools.A portfolio built as a publishing systemA static-first technical publication paired with a rate-limited, AI-assisted contact workflow that is queued, retried, idempotent, and recoverable.ThreadsA discussion application with threaded posts, comments, profiles, and community spaces.Prompt NexusAn open-source application for creating, finding, and sharing prompts for AI tools.SeedA statically generated blogging application backed by a headless content system.CactaA short-video social application with publishing, discovery, profiles, and audience interactions.System DesignCapacity, queues, failure handling, and distributed-system trade-offs.AI EngineeringLLM workflows, tools, evaluation, permissions, and operations.Software EngineeringModules, testing, refactoring, interfaces, and maintainability.System Design from First PrinciplesCapacity planning, queues, backpressure, retries, and failure handling.Production AI EngineeringModel calls, workflows, tools, evaluation, permissions, and operations.

Colophon

A static publication with one durable runtime path

Pages, articles, notes, search data, feeds, metadata, and social cards are built from the same validated content graph. The browser receives complete pages. The contact form is the exception: it uses a queue, an idempotent durable write, retries, and a managed dead-letter path because losing a message is a different class of failure than losing an animation.

Public read path

Content does not wait for JavaScript

Next.js builds every public route ahead of time. The first response contains the article or project, navigation, code, diagram source, canonical metadata, and structured data. Small client leaves handle only stateful enhancements: navigation, themes, filters, reading position, copy feedback, and search.

  1. 01

    Request

    Vercel receives a request for a page built ahead of time.

  2. 02

    HTML

    The response already has the copy, links, metadata, and diagram source.

  3. 03

    Enhance

    Small scripts add search, themes, filters, copy buttons, and Mermaid.

Writing workflow

Convenient authoring, reviewable output

Keystatic is the editing surface; MDX and JSON remain the versioned source. Shared Zod schemas own runtime validation and inferred public types. Automated parity checks keep authoring fields aligned with the build-time contracts.

Author
Keystatic writes MDX and JSON
Validate
Schemas, dates, links, relationships, and Mermaid
Generate
Pages, RSS, search, sitemap, and social cards
Release
Types, lint, tests, links, build, and bundle budgets

Search and diagrams

Only load what the page needs

Search

Pages, writing, projects, topics, and series are bundled into a small static index. Searches stay in the browser.

Mermaid

The source stays readable without JavaScript. Mermaid loads only on an article with diagrams, shortly before one enters view.

Theme

A small script applies the saved or system theme before the first paint, which avoids a flash of the wrong colors.

Contact delivery

Fast acknowledgement, durable completion

The public request validates, sanitizes, rate-limits, and waits only for QStash to accept the message. A signed worker then analyzes it, persists it idempotently, and sends a best-effort notification. A failed durable write returns a retryable error; exhausted deliveries remain available in QStash’s managed dead-letter queue.

  1. 01

    Check

    Verify the token, validate the fields, and clean the input.

  2. 02

    Limit

    Redis stops bursts and repeated submissions before they become work.

  3. 03

    Queue

    QStash takes over delivery, retries, and dead-letter storage.

  4. 04

    Finish

    A verified worker analyzes the message, records it, and notifies me.

What I got wrong in v1

Simplifying the wrong boundaries created regressions

Navigation

I removed too much client behavior. The replacement mobile menu looked simpler in code but stopped closing reliably after navigation.

Content ownership

Taxonomies and visitor-facing copy still lived partly in TypeScript, so the CMS was not the end-to-end authoring surface I claimed it was.

Writing shape

The validator assumed every useful post was a long article with several headings, sources, and a diagram. That made short notes needlessly awkward.

Performance

Home, Writing, Article, Projects, and Contact have explicit gzip budgets. Main content and navigation remain useful with scripts disabled.

Discovery

The same validated records feed canonical URLs, RSS, the sitemap, social images, search, and JSON-LD. Drafts are excluded at every projection.

Measurement

When a GA ID is present, typed events record useful interactions. Vercel Analytics covers page traffic; neither tool is needed to render the site.