ColorAptitude™

Platform

Product updates

Alle wijzigingen, verbeteringen en opgeloste problemen in ColorAptitude™. Actueel gehouden bij elke release.

In ontwikkeling
Opgelost
  • Age norms — hue ordering resultsageNormResult now stored as a full { rating, note } object so the inline "Norming" metric card shows the age-corrected rating and label, not the non-corrected fallback from projection.summary.norming.
  • Age norms — chroma ordering results — Added birthdate extraction and age-informed normingNote. Age-corrected FM100 norms are *not* applied (different test / different scale); note states "under development — comparison is indicative."
  • Age norms — lightness ordering results — Same pattern as chroma. Fixed incorrect fallback expression (resolveScoreBand(score.totalScore) && "..." would short-circuit incorrectly); replaced with explicit typed string literal.
v0.5.02026-04-12
Nieuw
  • Certificate fast-pathSession.certCode column (unique index) populated atomically on session completion via both completeSession() and persistSessionResult(). Eliminates full-table scan for certificate verification; /api/verify/[code] now resolves in O(1) for all new sessions. Legacy sessions (pre-0.5.0) fall back to a bounded scan of certCode IS NULL rows (max 10,000).
  • Prisma migration baseline — Replaced five inconsistent partial migration folders with a single authoritative 0_baseline/migration.sql generated from the live schema. Migration infrastructure is now clean and prisma migrate dev works correctly.
  • Admin error boundarysrc/app/[locale]/admin/error.tsx provides a dedicated error UI for the admin panel with "Try again" and "Back to admin" actions.
  • Pakketten page — Tier 2 as 4th package column — "Assessment + Spyder" (hardware calibration, ASTM E1499-16 §5.3 conform) added as a fourth card in the package grid alongside Training, Assessment (Tier 1), and Assessment + Training. Removed the separate compliance section that previously appeared below.
  • Comparison table extended — Three new rows added to the package comparison table: hardware colorimeter, D65/γ 2.2 verification, ASTM E1499-16 audit compliance.
  • Architecture documentationdocs/ARCHITECTURE.md — complete English technical reference (21 sections, ~1,800 lines) covering data model, API routes, scoring system, session lifecycle, certificate system, publishing governance, security model, and known limitations.
  • This changelogCHANGELOG.md established at project root.
Gewijzigd
  • src/app/[locale]/pakketten/page.tsx — Grid widened from max-w-5xl md:grid-cols-3 to max-w-6xl sm:grid-cols-2 lg:grid-cols-4. Tier labels added to Assessment and Tier 2 cards. Package Package type generalized to support optional href (renders <Link> instead of Stripe checkout button) and badge fields.
  • src/lib/server/assessment-persistence.ts — Imported sessionIdToCode from src/lib/cert-code.ts. Both completeSession() and persistSessionResult() now write certCode on every session completion.
Opgelost
  • src/app/api/mini-test/complete/route.tsemailSent update was incorrectly using updateMany({ where: { userId } }), marking *all* mini-test results for the user as email-sent. Fixed to update({ where: { id: miniTestResult.id } }).
  • src/lib/server/user-access.ts — Access code redemption replaced array transaction (cannot check incremented.count inside array form) with interactive transaction; atomically enforces maxUses limit and throws inside the transaction if already at capacity, triggering rollback.
  • src/lib/domain/scoring.ts — Indentation misalignment on note: field corrected.
v0.4.02026-03 (approximate)
Nieuw
  • Multi-locale support: Norwegian (no) and Portuguese (pt) translation files completed with exercises and flow sections.
  • Org invite infrastructure (/api/org/invite) — endpoint scaffolded; email delivery parked.
  • src/app/api/org/dashboard/route.ts — organization-level aggregated statistics endpoint.
Gewijzigd
  • src/app/api/training-scores/route.ts — Previous score fetch moved before new score creation to eliminate TOCTOU race condition where concurrent requests could see each other's score as "previous."
v0.3.02026-02 (approximate)
Nieuw
  • Access code system with full rights matrix (miniTest, fullTest, training, certificate, dashboard, progress, compareResults).
  • UserAccess grant model with sources: CODE, PAYMENT, ADMIN, MANUAL.
  • Mini-test entry flow (/api/mini-test/complete) — unauthenticated, creates LEAD user, grants full access, sends result email via Resend.
  • Certificate verification endpoint (/api/verify/[code]) with public privacy-filtered response.
  • src/lib/cert-code.ts — DJB2-based short code generation (CA-XXXXXX format).
Gewijzigd
  • Session completion writes certCode (O(1) certificate lookup) — see 0.5.0 for the activation of this path.
v0.2.02025-12 (approximate)
Nieuw
  • Assessment versioning: AssessmentVersion with isCurrent flag; sessions linked to specific version at creation time.
  • Publishing governance domain (src/lib/domain/publishing-governance.ts) with lane model, blocker validation, and advisory warnings.
  • Exercise authoring domain (src/lib/domain/exercise-authoring.ts) with full ExerciseTemplateDefinition type.
  • Session guard (src/lib/domain/session-guard.ts) — ASTM E1499 §8.1.1 and §7.1.1 compliance checks.
  • Admin panel — exercise editor, publish planner, release board, version manager, colour library manager.
v0.1.02025-10 (approximate)
Nieuw
  • Initial Next.js App Router project with TypeScript, Tailwind CSS 4, Prisma + PostgreSQL.
  • NextAuth v5 with JWT strategy; email+password and SSO token providers.
  • Core data model: User, Organization, Assessment, AssessmentVersion, Session, Response, Score, ScoreProfile, ScoreAxis.
  • Scoring domain (src/lib/domain/scoring.ts) — diagnostic and training modes, band classification, error analysis.
  • OKLCH and CIELAB color science modules.
  • Hue Ordering Diagnostic — first complete assessment family.
  • Multi-locale i18n: nl (default), en, de, fr, es.
  • Registration with bcrypt password hashing.
  • Landing page, knowledge base, training hub scaffolding.