Skip to main content
Ashish KumarSDET II
Systems & repositories

Projects & Frameworks

Test harnesses, an MCP server, live CI-driven suites, and AI-assisted automation — each with the architecture and the reasoning behind it, not just the tool list.

  • UI → API → DB → Kafka → WebSocket

    Multi-Layer Playwright Framework

    One order verified at every layer: UI, REST/GraphQL, Postgres, Kafka, and WebSocket.

    • Playwright
    • TypeScript
    • Docker
    • PostgreSQL
    • Kafka
    • GraphQL
    • GitHub Actions
    154
    tests across UI, API, DB, Kafka, WebSocket, and E2E
    34
    @smoke tests on every pull request
    tests/e2e/order-flow.spec.ts
    @e2e @smoke
    /**
     * UI -> REST / GraphQL -> Database -> Kafka / WebSocket -> UI
     * One business transaction verified at every layer.
     */
    // …
    await test.step('DB: order row, item row and stock', async () => {
      // …
      const stock = await db.queryOne<{ stock: number }>(
        'SELECT stock FROM products WHERE id = $1', [product.id]);
      expect(stock!.stock).toBe(23);
    });
    
    await test.step('Kafka: order.created event', async () => {
      const event = await listener.waitForEvent(
        (e) => e.value?.order?.id === orderId && e.value.eventType === 'order.created',
      );
      expect(validate(OrderEventSchema, event.value).order.total).toBe(39.98);
    });
  • Model Context Protocol

    Portfolio MCP Server

    Exposing this site's data as MCP tools any AI client can query.

    • Cloudflare Workers
    • MCP SDK
    • TypeScript
    • Zod
    10
    MCP tools covering experience, projects, hiring info, quality metrics, and writing
    2
    transports — remote (Streamable HTTP/SSE) and local (stdio)
    src/tools.ts
    MCP SDK
    export function registerPortfolioTools(server: McpServer) {
      server.registerTool(
        "get_experience",
        {
          title: "Get work experience",
          description:
            "Ashish Kumar's work experience history — company, role, dates, responsibilities, quantified results, and business impact for each position.",
        },
        async () => jsonResult(await getExperience())
      );
      // … 6 more tools
    }
  • Live public testbed

    Sauce Demo Playwright Suite

    A real E2E suite against a live public store, with its report published and replayable here.

    • Playwright
    • TypeScript
    • Allure
    • GitHub Actions
    • Shopify
    25
    functional cases across catalog, cart, checkout, account, and journey
    3
    browsers — Chromium, Firefox, WebKit, matrixed in CI
    tests/journey/full-purchase-journey.spec.ts
    @account @journey
    test.describe('Full purchase journey @account @journey', () => {
      test('signup, login, add to cart, checkout, and browse site pages', async ({
        registerPage, loginPage, homePage, productPage, cartPage, checkoutPage, page,
      }) => {
        const user = buildDisposableUser();
    
        await test.step('sign up as a new customer', async () => {
          await registerPage.goto();
          await registerPage.register(user);
          await expect(homePage.header.logOutLink).toBeVisible();
        });
        // …
      });
    });
  • Built & load-hardened

    Food Recommendations

    A no-login food and dish recommendation board, built and load-hardened like a real product.

    • Next.js
    • TypeScript
    • Prisma
    • PostgreSQL
    • Redis
    • Sentry
    30
    Playwright cases — happy path, admin, validation, a11y, SEO/errors
    Redis
    rate limiting that actually holds across serverless instances
    lib/rateLimit.ts
    Upstash Redis
    // Redis-backed so limits actually hold across Vercel's ephemeral serverless
    // instances — the previous in-memory Map only limited requests hitting the
    // same warm instance, which on serverless is close to no protection at all.
    export async function isRateLimited(key: string, limit: number, windowMs: number): Promise<boolean> {
      const { success } = await getLimiter(limit, windowMs).limit(key);
      return !success;
    }

// more case studies

Frameworks, Tools & Experiments

  • A modular Selenium framework built to be maintained, not just to pass.

    • Selenium
    • Java
    • TestNG
    • Log4j
    • Extent Reports
    • GitHub Actions
  • REST Assured + Maven, built for automated execution and reporting from day one.

    • REST Assured
    • Java
    • Maven
    • GitHub Actions
  • Using AI coding agents deliberately inside the test-authoring workflow.

    • Playwright
    • MCP Server
    • GitHub Copilot
  • A Chrome extension that gets a screenshot from the active tab into a shared Drive folder in two clicks.

    • Chrome Extension
    • JavaScript
    • Google Drive API
    • OAuth

// engineering rigor

Deterministic Test Design Principles

Automation suites have to be as dependable as the software they certify. These are the rules the multi-layer framework is built on.

  • Isolated test state

    Every test creates its own data through factories or a seeding API and matches events by its own order id, with cleanup fixtures undoing setup in reverse order — so tests run in any order, in parallel.

    Invariant: Order independence

  • Strict contract boundaries

    Responses are validated against the OpenAPI spec and typed schemas at every boundary, and the GraphQL schema is snapshotted, so a contract change fails a test instead of a customer.

    Invariant: Schema-validated payloads

  • Flakiness made visible

    Retries exist in CI, but any test that passes only on retry is listed in a pull-request comment. A retry that hides a flaky test is a defect in the suite, not weather.

    Invariant: No silent retries

// source inspection

Want to inspect the suites yourself?

All of the featured frameworks are public, with CI runs and reports you can open — including the runs that go red, and why.