This is the engineering memory layer for the portfolio ecosystem. Not the changelog (that lives at /changelog and reads the raw commit firehose). Not the project archive (those live at /architecture). This is the editorial registry of architectural moments the system chooses to remember — versioned, typed, append-only.
01 · The registry
17 architectural events recorded across 2026-05-14 → 2026-05-19. 16 currently active; the rest carry the superseded flag and remain in the archive for the audit trail.
Architecture
1
Infrastructure
3
AI system
7
Topology
2
Release
2
Milestone
2
Evolution
0
02 · Filter by category
Seven categories index the registry. Each one is an architectural axis — not a content type. Pick one to narrow the archive, or stay on the unfiltered view to read the full memory.
The slider below is the cursor over the engineering memory. Drag the thumb, click a tick, step with the arrow keys, or press play to let the cursor advance from the present back to genesis. The track is a single WAI-ARIA slider — keyboard, mouse, and touch all work; reduced-motion preserves the slider but removes the easing.
Four-tier duration multiplier taxonomy (FULL / MID / SNAPPY / STILL ≡ 1.0 / 0.85 / 0.65 / 0.0) derived from the cognition signal plus the visitor's reduced-motion preference. Exposed as a React Context with `usePacing()`. A once-per-session `pacing-transition` beacon fires on `visibilitychange:hidden` via `navigator.sendBeacon` with sessionStorage dedupe.
V5 § 2.5 declares pacing an emotional engine, not visual ornament. The four discrete tiers replace the continuous multipliers other sites bikeshed over — a 0.83 vs 0.84 difference is invisible noise, but a 0.85 vs 1.0 difference is a perceptual shift. Spring physics is banned by the type signature, not just by convention.
AI systemSub-PR 6.2· perception
Cognition-aware navigation — first perception observer
The cognition state taxonomy (arrival / exploring / engaged) plus a layout-mounted observer that watches `usePathname()` and fires `cognition-signal` and `navigation-flow` events to the 6.1 endpoint when the visitor has opted in. Renders null. Idle CPU is zero — the only work runs on pathname change, which is a user action.
The three buckets are deliberately few: two collapses to new-vs-returning, four invites bikeshedding without adding decision value. The transitions are monotone in the per-session page counter so the inference layer never regresses a session from engaged back to exploring.
AI systemSub-PR 6.4· memory
Memory layer V5 — configurable TTL, IPv6 redaction, pages index
The V4 Lumina memory layer gained four V5 extensions without breaking the V4 storage shape: configurable 14-30 day TTL via `V5_MEMORY_TTL_DAYS`, IPv6 PII redaction ordered before IPv4, a per-session recently-visited pages index at `lumina:session:<id>:pages` (foundation only — no observer yet), and a memory adoption hash that drives the live hit-rate tile on /lumina/brain. V4 visitors' sessions continue to read through the same keys with the same parser.
Phase 10's ambient awareness needs longer context windows and a pages index it can read without ever revealing perception to the visitor. Shipping those primitives during the Phase 6 foundation pass — rather than at Phase 10 launch — keeps the V5 foundation work fully isolated from the eventual ambient surface.
ArchitectureSub-PR 6.1· perception
Perception telemetry foundation — schema + endpoint + transparency
The first commit on the V5 operating constitution. Six perception categories (scroll-velocity, dwell-time, section-engagement, tab-visibility, navigation-flow, adoption) backed by an edge POST endpoint that gates every write behind an operator env switch, a closed schema allow-list, and a same-origin consent cookie. The /v5/perception page documents the contract publicly. No observer ships in 6.1 — the chassis is the deliverable.
V5 § 4.1 demands that creepiness be architecturally impossible, not merely policy. The endpoint accepts only bucket labels (never raw values); the storage is six HINCRBY counters; the read path returns aggregate maps. The information a `we noticed you spent 8 minutes on X` message would need does not exist anywhere in the system.
MilestoneV5 Phase 6· portfolio
V5 Phase 6 closes — Sensory Awakening complete
Five sub-PRs landed Phase 6 of the V5 operating constitution: perception telemetry foundation, cognition observer, cinematic pacing engine, memory layer V5 extensions, and the public transparency page that closed the phase. The 60-90 day observation window opened on the same commit; no further perception surface ships until Phase 7's foundation lands.
V5 § 0.2 makes the post-phase observation window mandatory — skipping it accumulates maintenance debt the doc treats as a circuit-breaker. The Phase 6 surface area was deliberately small (one transparency page, three observers, one memory extension) so the observation period could measure adoption without competing surfaces drowning out the signal.
AI systemV4 Phase 4 · Sub-PR 4.5· lumina
First Lumina sub-agent — architecture-critic
A heuristic router selects between Lumina and the architecture-critic sub-agent based on critique-verb + architecture-noun signals in the user's message. The sub-agent appends its discipline overlay onto Lumina's base system prompt (inheriting the voice and tool registry); a synthetic init tool surfaces the routing decision through the existing tool-pill UI. Routing decisions land in a KV hash for observability.
A second inference call for routing would have doubled cold-start latency. The deterministic classifier returns in under a millisecond. ONE sub-agent only — the V4 doc explicitly forbids the multi-agent mesh other AI portfolios sprawl into.
AI systemV4 Phase 4 · Sub-PR 4.1· lumina
Public Lumina transparency — /lumina/brain + /lumina/failures
Two public surfaces document Lumina end-to-end: `/lumina/brain` exposes the system prompt, the tool registry, the memory contract, and the runtime topology; `/lumina/failures` is an append-only corrections log where every operator-grade mistake gets a what / why / fix paragraph triplet. V4 § 2.3 turned transparency from a footer link into a brand surface.
Lumina would otherwise read as a black box whose behavior visitors had to take on faith. The transparency pages make every claim grep-able in the public repo, which is the asymmetry V5 § 2.3 later codified as a brand contract.
KV-backed session memory at `lumina:session:<id>`: full thread persistence for 14 days, PII redaction (emails, phones, AWS keys, IPv4, TC Kimlik, API key prefixes), an 8-turn verbatim context window, and a Haiku-generated session summary at `lumina:summary:<id>` once a thread crosses the cap. The chat survives reloads without leaking identity through the redaction net.
The aim was operator-grade memory without `welcome back, Emre` ambient profile theatre. The redaction net is purely additive; the visitor-facing controls (opt-out + forget-me) shipped as separate sub-PRs once the memory layer itself was stable.
A dedicated `/playground` namespace with capabilities-detection infrastructure, lazy-loaded experiment shells, per-experiment funnel telemetry (visit / mount / capability-miss hashes), and the diagnostic `hello-playground` experiment shipped as proof-of-contract. Triple-gate access: env feature flag, browser capability detection, explicit visitor opt-in.
Quarantining experimental surfaces from the production portfolio's bundle + Lighthouse posture meant the experimentation cadence could rise without dragging the cinematic identity down. Phase 6+ surfaces that need WebGPU, heavy 3D, or experimental APIs land here first.
AI systemV4 Phase 2 · Sub-PR 2.1· lab
/lab scaffold + IAM Translator — first public AI experiment
The `/lab` namespace opens with the IAM Translator: a streaming Bedrock-backed endpoint that turns plain-English AWS access requests into hardened least-privilege IAM JSON. Triple-gate budget — per-IP rate limit, per-experiment daily cost cap, server-side allow-list of input shapes — keeps experimentation cheap. Edge runtime; cost telemetry to the V4 dashboard.
Phase 2's wedge was public-facing AI experiments that DEMONSTRATE Lumina's operating discipline rather than describe it. IAM Translator is the canonical example: the security-sensitive output forces the architecture to handle prompt injection, cost caps, and streaming failure modes correctly.
Release0.1.0· lumina-chat
@emredogan/lumina-chat published — first OSS release
Lumina extracted as a standalone React package and published to npm. The portfolio consumes the same package the public consumes — there is no internal-only fork. 23.7 kB unpacked tarball; the package surface tracks Lumina's V3 + V4 invariants exactly.
Distribution before perfection. The OSS contract enforced a clean API boundary that the V4 + V5 transparency surfaces (and the eventual sub-agent registry) had to respect.
InfrastructureV4 Phase 1 · Sub-PR 1.2· portfolio
Public telemetry dashboard — /telemetry
A public `/telemetry` page renders every observable axis the platform tracks: Lumina p95 latency, auto-tweet success rate, npm download counts, MRR, lab adoption funnels. Backed by `lib/telemetry/metrics.ts` — a single allow-listed metric registry that gates every KV write and read against the V4 § 2.13 schema. Graceful no-op when KV is unavailable.
The telemetry surface became the platform's first explicit operator console — a contract that turned `claims about how the site works` into `live numbers the visitor can audit`. Every subsequent V4 + V5 sub-PR has had to declare which metric slot it occupies before merging.
TopologyV3 Phase 4· cloud-waste-hunter
CWH topology engine transplanted onto the homepage
The Three.js + @xyflow/react topology that originally lived on /architecture/cloud-waste-hunter was migrated onto the homepage as the hero constellation. The same scene, with the project-side camera philosophy adapted to a spatial-freedom variant that reacts to scroll. Identical chunk reused across both surfaces — the global bundle didn't grow.
The CWH topology was the strongest single visual artifact the portfolio had. Moving it to the homepage made the engineering case the FIRST thing a visitor sees, ahead of any biographical / case-study prose. The decision required the topology to support two camera modes (constrained scroll-through on /architecture, free spatial on the home hero) which the same engine had to negotiate.
ReleaseV3 Phase 3· cloud-waste-hunter
Cloud Waste Hunter Pro — pricing + live metrics shipped
Cloud Waste Hunter moved from project case study to monetized SaaS surface: a pricing page, a Lemon Squeezy checkout flow, a live-metrics endpoint that surfaces real production numbers, and the embedded CWH Pro CTA that appears on both /projects/aws-waste-hunter and /architecture/cloud-waste-hunter. The portfolio became its own conversion funnel.
Demonstrating that a single-engineer SaaS can run a production billing flow inside the portfolio itself — instead of linking out to a separate marketing site — is the V3 signal that V4's OSS launch + V5's adaptive recruiter intelligence would each build on. The portfolio became a conversion surface in its own right.
TopologyV3 Phase 2· cloud-waste-hunter
3D AWS topology — Cloud Waste Hunter explorer
A WebGL scene representing the Cloud Waste Hunter architecture as a 12-node 3D constellation. Three.js with @react-three/fiber + @react-three/drei; mobile falls back to a 2D hierarchical view. Renders only on the project sub-page (route-isolated chunk) so the global bundle stays cinematic-fast.
V3's signal experiment: a project case study where the topology is the protagonist, not a static SVG. The route quarantine kept the WebGL cost out of the global bundle; the same pattern is the foundation for Phase 8's cinematic topology (one route, one spectacle).
Five small foundation commits hardened the platform for what V4 would later need: the GitHub events feed moved behind an edge KV cache; the Lumina chat endpoint migrated to edge; conversations persisted across reloads; the global reduced-motion guard collapsed every animation to 0.01ms under the OS preference; a sitemap + robots + JSON-LD + skip-to-content + 44px touch targets shipped together.
The cinematic identity required a performance posture rigid enough to absorb the V4 + V5 AI surface area without ever sacrificing Lighthouse Mobile 98+. Phase 1 was where that contract became architectural rather than aspirational.
MilestoneV1· portfolio
Cinematic identity — genesis commit
The initial cinematic identity: black canvas, Geist typography, the #00d2ff accent, the editorial vocabulary the rest of the ecosystem inherits. Three production project case studies (Cloud Waste Hunter, VibingCoderAI, FormAI), three long-form notes, the V3 roadmap document.
The genesis commit framed the engineering work as a single coherent surface rather than a sequence of demos. Every subsequent system — Lumina, /lab, /telemetry, /v5/perception, /evolution — has had to inherit that voice or be rejected.
05 · Live adoption
The temporal layer records three kinds of adoption event: the page rendered, a category filter was applied, an event deep-link was followed. All three are aggregate-only — counters by event kind, no per-visitor identifier, no session-id field. The numbers below are cumulative since the layer was first enabled.
view
—
category_view
—
event_view
—
Playback verbsCounters for the five primitive operations the slider exposes — seek (click or keyboard jump), scrub (drag), play (auto-advance), pause, step (single frame). Every counter increments fire-and-forget; the slider never blocks on the network.
seek
—
scrub
—
play
—
pause
—
step
—
Timeline engagementThe slider's lifecycle hash. Each visitor session increments mounted at most once when the slider renders, and engaged at most once on the first scrub, seek, step, or play interaction. The rate captures awareness vs use.
mounted
—
engaged
—
engagement_rate
—
06 · Source files
Every entry in the registry is grounded in code. Click any row to read the file on GitHub.
Phase 7 closes here. Four sub-PRs landed the temporal architecture: 7.1 the schema + registry + archive surface, 7.2 the deterministic playback primitive, 7.3 the WAI-ARIA slider above, and 7.4 the per- project mount on /architecture pages (hidden below 768px viewport, opt-in by registry coverage). The observation window now opens before Phase 8 (cinematic topology); no further temporal surface ships during that window.