---
title: "PromptID Case Study"
canonical: https://wavect.io/case-studies/promptid/
language: en
description: "PromptID is an AI-native EdTech platform for employers and universities. It examines learners by analysing the train of thought, not memorisation."
image: "https://wavect.io/img/general/bak/open_graph_preview.jpg"
---

[← All case studies](/case-studies/)

![PromptID logo](/img/clients/svg/promptid.svg)

CASE STUDIES · 2026

PromptID

# 0 to production in 6 weeks. Pilot-ready and investor-demo-ready.

PromptID is an AI-native EdTech platform for employers and universities. It examines learners by analysing the train of thought, not by rewarding memorisation. A proprietary algorithm drives the assessment engine.

[“Shipped what would normally take a bigger team a lot longer. Report overhaul, security hardening, infrastructure tightening, they owned it end to end. They kept production stable through pilot prep …” April Elias Google](https://www.google.com/search?q=wavect+gmbh)

AI Fullstack Build 2026 Live

At a glance

Engagement Fullstack Build

Industry [EdTech AI](/industries/education/)

Stage Seed

Engagement size Extended retainer

Year 2026

Stack

NestJS NextJS LangChain Kubernetes Terraform Typescript

Status Live

Live [promptid.com](https://promptid.com/)

## Overview

PromptID is an AI-native EdTech platform for employers and universities. It examines learners by analysing the train of thought, not by rewarding memorisation. A proprietary algorithm drives the assessment engine.

## What's the challenge?

The market moved mid-build and the timeline shrank by a month. Pilot conversations and investor demos sat on the calendar. LLM agnosticism, intuitive UX, production-grade from day one, none negotiable. The month had to come from scope, not quality.

## What call did we make?

### Original timeline shortened by a month. QA stayed sharp anyway.

> The original Gantt had a final month of QA and testing. The market took that month, so we had to be production-ready earlier. The reflex move is to cut testing rigor. We cut feature scope instead. The production-quality bar held by squeezing the surface area, not the testing time. The investor demos and pilot conversations on the client's calendar got what they needed.

## What We Did

Timeline shrank by a month mid-build. We cut feature scope, not QA, and held the production bar. NestJS API with a BullMQ eval queue, NextJS frontend, LangChain so model swaps are config, Kubernetes autoscaling. Shipped pilot-ready and investor-demo-ready in six weeks, when the market needed it, not when the Gantt did.

## Outcomes

### 6 weeks - 0 to Production
- **Category:** Speed

### Pilot + Investor - Demo-ready under market pressure
- **Category:** Business

Want outcomes like these on your build?

Fixed scope. Fixed deadline. Signed SoW.

[Get in touch](/contact/)

## Selected Screens

![PromptID, screen 3](/img/case-studies/promptid/003_hu_d64c4b9020c1cb09.webp)

![PromptID, screen 4](/img/case-studies/promptid/004_hu_6254aab7d7532db2.webp)

![PromptID, screen 5](/img/case-studies/promptid/005_hu_3a5c023d2f917c66.webp)

![PromptID, screen 6](/img/case-studies/promptid/006_hu_755097b143882b8d.webp)

![PromptID, screen 7](/img/case-studies/promptid/007_hu_5a29b3a7433c3974.webp)

## Architecture & Flows

### Production architecture

NestJS API + Eval Worker on Kubernetes (autoscaled), Postgres and Redis as managed services, S3 for uploads. LangChain orchestrates model-agnostic LLM calls; the proprietary assessment engine and reasoning-model eval path are highlighted in yellow. Provisioned end-to-end with Terraform.

The diagram illustrates a simplified high-level architecture and omits confidential implementation and security details.

### Async submission evaluation

```
sequenceDiagram
  autonumber
  participant L as Learner Browser
  participant API as NestJS API
  participant Q as BullMQ (Redis)
  participant W as Eval Worker
  participant AI as OpenAI Reasoning
  participant DB as Postgres
  L->>API: POST /submissions
  API->>DB: persist submission
  API->>Q: enqueue eval job
  API-->>L: 202 Accepted
  Q->>W: dispatch job
  W->>AI: evaluate (LangChain)
  AI-->>W: score + construct
  W->>DB: persist evaluation
  L->>API: poll /submissions/{id}
  API->>DB: read evaluation
  API-->>L: feedback payload
```

Async evaluation pipeline. The submission is acknowledged immediately (202); the reasoning model scores the train-of-thought asynchronously and the learner picks the result up on the next poll.

## Client Voice

[Google · Verified](https://www.google.com/search?q=wavect+gmbh)

> **Shipped what would normally take a bigger team a lot longer.** Report overhaul, security hardening, infrastructure tightening, they owned it end to end. They kept production stable through pilot prep and investor demos. They communicated clearly and never made us chase a status update. Awesome team!

April Elias

[Trustpilot · Verified](https://www.trustpilot.com/review/wavect.io)

> **Two separate projects, consistently positive both times.** Professional, responsive, extremely competent, and very easy to work with. They take the time to listen carefully, ask thoughtful questions, and make sure everyone is aligned. Highly capable technically and consistently go above and beyond to keep momentum moving. Even when requirements evolve, they remain calm, collaborative, and solutions-oriented. Would absolutely recommend Kevin, Chris, and the Wavect team.

Jared Sutton

[Google · Verified](https://www.google.com/search?q=wavect+gmbh)

> **Built multiple venture-backed startups with Wavect over 4 years.** World class team. They're great thought partners while in discovery, reliable and predictable engineers while in dev, and just generally great guys to work with. Highly highly recommend you work with this team for your next project.

Joseph Miller

[Google · Verified](https://www.google.com/search?q=wavect+gmbh)

> **Amazingly efficient, professional, and excellent work.** I recently worked with Kevin and his team on a large project. I plan on using him again and highly recommend his services.

Robert Reynolds

Want to have the same impact?

Fixed scope. Fixed deadline. Signed SoW.

[Get in touch](/contact/)

## What We Learned

Model agnosticism pays off fast. The landscape keeps shifting and LangChain’s abstraction turned model swaps into a config change. Kubernetes autoscaling earned its keep too, no overprovisioning, but the system absorbed load spikes in seconds.

## Tech Stack

- [NestJS](https://nestjs.com/)
- [NextJS](https://nextjs.org/)
- [LangChain](https://www.langchain.com/)
- [Kubernetes](https://kubernetes.io/)
- [Terraform](https://www.terraform.io/)
- [Typescript](https://www.typescriptlang.org/)

## Tags

- AI
- EdTech
- LLM

## Links & Resources

[PromptID](https://promptid.com/)

Related services

- [AI Agents & Products](/services/artificial-intelligence/)
- [MVP Development](/services/mvp-development/)
- [Custom Software Development](/services/software-development/)

Client references and trademarks

Wavect publishes these case studies about its own work. Client names, logos and trademarks are the property of their respective owners and are used here to identify the work, not to imply any partnership, sponsorship or endorsement. Each case study describes Wavect's own contribution inside a larger effort, and other parties, including the client's own teams and other vendors, contributed to the results. Figures attributed to a client are that client's own reported numbers. Figures about our work come from our records as of the review date, and we provide evidence on request. Reviews are reproduced from the platform named on each card and link to their source. We do not publish the commercial terms of any engagement, and product screenshots remain the property of the client shown. If you are named here and want a correction, a change or a removal, write to us and we will act on it: [office@wavect.io](mailto:office@wavect.io)

### [Offlinery](/case-studies/offlinery/)

Offlinery was a dating app built against swipe culture. A proprietary matching algorithm surfaced nearby people who actually wanted to meet in person. Shipped …

## Structured Data

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@id": "https://wavect.io/#organization",
      "@type": [
        "Organization",
        "ProfessionalService",
        "LocalBusiness"
      ],
      "employee": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "founder": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "legalRepresentative": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "name": "Wavect GmbH",
      "subjectOf": {
        "@id": "https://wavect.io/verified-claims.json#dataset",
        "@type": "Dataset",
        "creator": {
          "@id": "https://wavect.io/#organization",
          "@type": [
            "Organization",
            "ProfessionalService",
            "LocalBusiness"
          ]
        },
        "description": "A machine-readable registry of quantitative and qualitative claims published by Wavect, with review dates, localized page appearances and public third-party citations where available.",
        "inLanguage": "en",
        "isAccessibleForFree": true,
        "license": "https://creativecommons.org/licenses/by/4.0/",
        "name": "Wavect verified publication claims",
        "url": "https://wavect.io/verified-claims.json"
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/team/kevin-riedl/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Kevin Riedl",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796365",
        "https://www.linkedin.com/in/wsdt",
        "https://github.com/wsdt"
      ],
      "url": "https://wavect.io/team/kevin-riedl/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/team/christof-jori/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Christof Jori",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796367",
        "https://www.linkedin.com/in/jocr77/",
        "https://github.com/jo-chris"
      ],
      "url": "https://wavect.io/team/christof-jori/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/#website",
      "@type": "WebSite",
      "inLanguage": [
        "en",
        "de",
        "es",
        "zh"
      ],
      "name": "Wavect",
      "potentialAction": {
        "@type": "SearchAction",
        "query-input": "required name=search_term_string",
        "target": {
          "@type": "EntryPoint",
          "urlTemplate": "https://wavect.io/search/?q={search_term_string}"
        }
      },
      "publisher": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/case-studies/promptid/#webpage",
      "@type": "WebPage",
      "dateModified": "2026-05-21",
      "inLanguage": "en",
      "isPartOf": {
        "@id": "https://wavect.io/#website",
        "@type": "WebSite"
      },
      "lastReviewed": "2026-05-21",
      "speakable": {
        "@type": "SpeakableSpecification",
        "cssSelector": [
          ".faq-question",
          ".faq-answer"
        ]
      },
      "url": "https://wavect.io/case-studies/promptid/"
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@id": "https://wavect.io/case-studies/promptid/#case-study",
  "@type": "Article",
  "about": {
    "@id": "https://wavect.io/case-studies/promptid/#project",
    "@type": "CreativeWork",
    "creator": {
      "@id": "https://wavect.io/#organization",
      "@type": [
        "Organization",
        "ProfessionalService",
        "LocalBusiness"
      ]
    },
    "dateCreated": "2026-01-01",
    "description": "Fullstack Build engagement",
    "funder": {
      "@type": "Organization",
      "name": "PromptID"
    },
    "name": "PromptID",
    "subjectOf": {
      "@id": "https://wavect.io/case-studies/promptid/#case-study",
      "@type": "Article"
    },
    "url": "https://promptid.com/"
  },
  "abstract": "The market moved mid-build and the timeline shrank by a month. Pilot conversations and investor demos sat on the calendar. LLM agnosticism, intuitive UX, production-grade from day one, none negotiable. The month had to come from scope, not quality.",
  "author": {
    "@id": "https://wavect.io/#organization",
    "@type": [
      "Organization",
      "ProfessionalService",
      "LocalBusiness"
    ]
  },
  "datePublished": "2026-01-01",
  "description": "PromptID is an AI-native EdTech platform for employers and universities. It examines learners by analysing the train of thought, not by rewarding memorisation. A proprietary algorithm drives the assessment engine.",
  "headline": "PromptID, Wavect Case Study",
  "image": "https://wavect.io/img/clients/svg/promptid.svg",
  "inLanguage": "en",
  "isPartOf": {
    "@type": "CollectionPage",
    "name": "Wavect Case Studies",
    "url": "https://wavect.io/case-studies/"
  },
  "keywords": "AI, EdTech, LLM, NestJS, NextJS, LangChain, Kubernetes, Terraform, Typescript",
  "mainEntityOfPage": "https://wavect.io/case-studies/promptid/",
  "mentions": [
    {
      "@type": "DefinedTerm",
      "name": "NestJS",
      "url": "https://nestjs.com/"
    },
    {
      "@type": "DefinedTerm",
      "name": "NextJS",
      "url": "https://nextjs.org/"
    },
    {
      "@type": "DefinedTerm",
      "name": "LangChain",
      "url": "https://www.langchain.com/"
    },
    {
      "@type": "DefinedTerm",
      "name": "Kubernetes",
      "url": "https://kubernetes.io/"
    },
    {
      "@type": "DefinedTerm",
      "name": "Terraform",
      "url": "https://www.terraform.io/"
    },
    {
      "@type": "DefinedTerm",
      "name": "Typescript",
      "url": "https://www.typescriptlang.org/"
    }
  ],
  "publisher": {
    "@id": "https://wavect.io/#organization",
    "@type": [
      "Organization",
      "ProfessionalService",
      "LocalBusiness"
    ]
  },
  "url": "https://wavect.io/case-studies/promptid/"
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "item": "https://wavect.io/",
      "name": "Home",
      "position": 1
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/case-studies/",
      "name": "Case Studies",
      "position": 2
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/case-studies/promptid/",
      "name": "PromptID",
      "position": 3
    }
  ]
}
```
