{
  "@context": "https://w3id.org/openbadges/v2",
  "id": "https://tjakoen.github.io/badges/apsi-2215-midterm--kian-james.json",
  "type": "Assertion",
  "recipient": {
    "type": "email",
    "hashed": true,
    "salt": "356848bcfa2e79b394788182e010f7716b6fdc62439bb3ac23445773250302fa",
    "identity": "sha256$65739484729ec8ebaedf2a21b15c16e3bf13b19bfb25fb5920a4d36926e61849"
  },
  "issuedOn": "2026-09-16T00:00:00+08:00",
  "verification": {
    "type": "HostedBadge"
  },
  "image": "https://tjakoen.github.io/media/badges/apsi-2215-midterm--kian-james.png",
  "badge": {
    "id": "https://tjakoen.github.io/badges/apsi-2215-midterm",
    "type": "BadgeClass",
    "name": "Full Stack Web Development",
    "description": "Recognizes completion of both the relational REST API and React client assessments, each at the instructor-reviewed threshold.",
    "image": "https://tjakoen.github.io/media/badges/og-apsi-2215-midterm.png",
    "criteria": {
      "id": "https://tjakoen.github.io/badges/apsi-2215-midterm",
      "narrative": "Awarded after instructor review confirmed at least 75% on each required activity: M5A4 (Relational REST API) and M5A5 (HAUnted Sightings React client).\n\nAward threshold: 75%.\n\nm5a4: Relational REST API. Built a Node and Express API backed by a relational database. The assessment covered related tables and joins, REST endpoints, input validation, error handling, parameterized queries and separation of routes from data access.\n\nm5a5: HAUnted Sightings React client. Built a React client for the sightings API. The assessment covered API-driven lists and forms, server-side filtering, loading, error and empty states, responsive design, accessibility and component structure."
    },
    "issuer": {
      "id": "https://tjakoen.github.io/teaching",
      "type": "Profile",
      "name": "Tjakoen Stolk",
      "url": "https://tjakoen.github.io/teaching",
      "email": "tjakoen.s@gmail.com"
    }
  }
}
