Daeseon Yoo

Active · May 25, 2026

daeseon.ai

This site. Bilingual blog + private admin dashboard for drafts and distribution.

Role
Solo
Stack
Next.js 15 · TypeScript · Tailwind · MDX · Vercel

The blog you're on. Built from scratch so the constraints (writing tone, admin features, distribution) are mine, not a template's.

What it does

Why

I've been writing in private docs for years and not shipping any of it. This site exists to break that loop.

What's still missing

Project log

Chronological record of troubleshooting, retros, and updates while building this.

52 logged· Judgment layer 18 Decision
Last update: Jul 18, 2026Architecture overview ↓
filter

Decisions & milestones

  1. Korean applications get an evidence portfolio, not a longer resume

    Decision

    Jul 18, 2026 · 5 min

    Korean submissions split into a fixed 2-page PDF plus /ko/portfolio, a Korean evidence page sharing one showcase component with the English /portfolio. First public deploy of the whole resume system.

  2. Portfolio direction: animated case films instead of a text resume page

    Decision

    Jul 13, 2026 · 2 min

    New /portfolio surface renders production case studies as scene-stepped before/after diagram films. Case 01 (ERP↔MES transactional outbox) shipped.

  3. Resume factory: one data file generates the web page and the PDF

    Decision

    Jul 13, 2026 · 1 min

    lib/resumeData.ts is now the resume's single source of truth; /resume renders it and a puppeteer script prints the ATS-safe one-page PDF.

  4. Added ds-forge as a project + wired its build logs onto the site

    Decision

    Jul 9, 2026 · 2 min

    Added content/projects/{en,ko}/ds-forge.mdx with logSourceRepo=Daeseon-AI-Factory/ds-forge, so ds-forge's 94 public build-log entries aggregate on /projects/ds-forge — the same private-repo-over-token path talkak already uses. Framed generically (the public Lab: N+1 / pool-exhaustion / deadlock against real Postgres+HikariCP, data-structure visualizers, deterministic state→SVG engine), not as company-specific interview prep. Left featured:false and url pointed at /lab.

  5. Architecture deep-dives get a plain-language on-ramp — non-engineers now get the gist in one box

    Decision

    Jun 29, 2026 · 2 min

    The seven architecture deep-dives were dense and engineer-only (file:line citations, jargon, no on-ramp). Added a jargon-free 'In plain words' lead box to all eight files (talkak en+ko, Mimi, DocVault, Beside, ScreenBridge, Meta Smart Glass, Ki Clash): what it is in everyday terms, the one clever idea, a concrete analogy. The measured, source-cited technical body is unchanged below — progressive disclosure for two audiences.

  6. Talkak hero: real dashboard screenshot + embedded demo video

    Decision

    Jun 29, 2026 · 1 min

    Swapped Talkak's designed banner for a real screenshot of its multi-agent dashboard (agents online, approval queue, per-startup rows) and embedded the product's own demo clip on the project page. Added an optional `video` frontmatter field; ProjectBody plays it (autoplay/muted/loop, poster = image) instead of the still. Home cards stay image-only.

  7. Aligned the blog front door to the resume — featured set, About spine, DocVault active-use hook

    Decision

    Jun 24, 2026 · 2 min

    Re-aimed the home page and project hooks at the resume a recruiter reads first. Featured projects now match the resume's three Selected Projects (Talkak, Mimi, DocVault) instead of (Beside, Mimi, Talkak). The home About was rewritten from a generic 'mission-critical systems' blurb to the resume's concrete concurrency/transaction-integrity spine. DocVault now leads with 'in active use by a 40-person team' — its strongest signal, previously absent from the blog.

  8. Project index gets featured hierarchy + card thumbnails — and why GitHub social cards were rejected

    Decision

    Jun 19, 2026 · 3 min

    The /projects index read as a list of text blurbs: a placeholder subtitle, uniform cards, no visuals, no hierarchy. Chose a layout-only design-lock exception: sharper intro copy, featured-vs-rest split, and a card component that renders a hero thumbnail plus a live badge. Used only the real product OG images that already exist (Beside, DalkkakAI); GitHub social cards were tried and rejected because they prominently show 0 stars/forks on the flagships, and real product screenshots are login-walled.

  9. 'Review needed' becomes an admin toggle — off while recruiters are looking

    Decision

    Jun 11, 2026 · 2 min

    Every log entry without a human companion was rendering a 'Review needed' marker and an empty review column — and zero companion files exist, so that was every public entry. Added a site-wide admin toggle (showReviewNeeded in site.json), default off: entries render single-column, main content only.

  10. Architecture deep-dives become a third project surface — dalkkak-ai pilot

    Decision

    Jun 10, 2026 · 3 min

    Each project gets a source-verified architecture deep-dive. Chose a dedicated /projects/[slug]/architecture sub-page over making it the project page's main body (which would reverse the June 2 slim-page decision) or posting to the home feed. Piloted on dalkkak-ai, en+ko, with content extracted by a 13-agent analyze-verify workflow over the actual repo.

  11. Per-project README pages: stored + sanitized, not live-fetched

    Decision

    Jun 2, 2026 · 2 min

    Each project can now show its full README as its own page (/projects/<slug>/readme), and the README also feeds a richer project intro. Chose store-in-blog + sanitize-on-render over live-fetch from the (private) satellite, so the render is verifiable and dead links are neutralized.

  12. Recruiter cold-entry pass: surface current status, kill dead links, make the log scannable

    Decision

    Jun 2, 2026 · 3 min

    A cold recruiter-POV audit of every entry surface drove a content/IA pass — home Now block, post bylines, newest-first + grouped project log, live DalkkakAI link, summary rendering fix — all inside the v1 visual freeze. Visual redesign deferred.

  13. Slim the project page to intro + image + link + timeline

    Decision

    Jun 2, 2026 · 1 min

    The project page had grown busy — a multi-section MDX body plus links, stack, and the log. Cut it to a brief intro, an optional hero image, the real links, and the weekly timeline. The long detail now lives only in the Full README page.

  14. Project log gets a weekly engineering-log cadence (A+B, factual rollups)

    Decision

    Jun 2, 2026 · 2 min

    A flat 31-entry reverse-chron log read as a wall and didn't feel like a real engineering log. Chose weekly buckets with factual auto-rollups (A) + hand-written snapshot digests pinned on top (B). Rejected LLM auto-narrative and a daily/monthly nesting.

  15. Architecture overview — daseon.ai (this blog) as of 2026-05-31

    Snapshot

    May 31, 2026 · 3 min

    Next.js 15 App Router site that reads MDX from GitHub Raw at runtime so commits go live in ~3-5s without waiting for the Vercel rebuild.

  16. Decision — drop activity heatmap from v1 scope

    Decision

    May 31, 2026 · 3 min

    Activity heatmap (calendar grid colored by entry kind) was in the v1 plan but dropped after evaluation. Status header carries the bulk of the portfolio signal; heatmap is self-reflection tooling that does not need to be public-surface.

  17. Defer hook over-fire fix to v2 — accept override noise for now

    Decision

    May 31, 2026 · 3 min

    Hook keyword trigger fires on commits that ARE the kind:decision artifact (recursive case). Two options: accept the per-commit override-trigger overhead, or refine the hook to detect decision-entry diffs. Chose to accept the noise for now to close v1 and learn from real usage before refining.

  18. Project log system v1 spec — Revisions A through D in one batch

    Decision

    May 31, 2026 · 6 min

    Four spec revisions that take the logging system from a single-tier dual-write convention into a tiered judgment-recording system with a learning-gap kind, framework-cited templates, and CLAUDE.md-enforced option presentation.

  19. Close v1 of the project-log system — safety boundary codified

    Decision

    May 31, 2026 · 6 min

    v1 of the project-log system is shipped — 11 of 13 criteria fully done (1 dropped: heatmap; 1 user-state-blocked: 2 satellite hook upgrades pending dirty-tree cleanup). Author committed to a stronger safety boundary: the log system must never affect a satellite project's primary work. Codifies the boundaries the system already has and forbids future changes that violate them.

Build log

Week of Jul 13, 20261 entry · 1 Update
  1. Case films 02–05: gateway, HTTP 413, row lock, costing

    Update

    Jul 13, 2026 · 1 min

    The /portfolio page now plays five case films. Facts sourced from SKAX STAR docs; people scenes only where the sources record real collaboration.

Week of Jun 29, 20261 entry · 1 Troubleshoot
  1. Project pages were silently dropping their .mdx body — now rendered

    Troubleshoot

    Jun 29, 2026 · 1 min

    A live-site walkthrough found that a Mimi body line wasn't showing. Tracing it (not a cache lag — the local build HTML lacked it too) revealed ProjectBody rendered only frontmatter (description, metrics), links, and the log timeline, never project.content. Every project's What-it-does / Why / Engineering-bits prose was authored but unrendered. Added renderMdx(project.content), matching PostBody/WikiBody/LogBody.

Week of Jun 22, 20261 entry · 1 Update
  1. Ki Clash architecture deep-dive — the two-runtimes-one-Redis story, from source

    Update

    Jun 22, 2026 · 1 min

    Added a source-verified architecture deep-dive for Ki Clash, the newest project. The standout is the dual-runtime design: a Go game server and a Python FastAPI app serve the same game over the same Redis state, with the WATCH/MULTI/EXEC optimistic-concurrency pattern ported across both languages. The subagent workflow rate-limited mid-launch, so the analyze→verify→write was done inline in the main loop, reading the actual repo.

Week of Jun 15, 20266 entries · 5 Update · 1 UX retro
  1. Architecture deep-dives for 4 more projects — source-verified, adversarially checked

    Update

    Jun 20, 2026 · 2 min

    Fanned out the architecture deep-dive surface (piloted on talkak) to Mimi, DocVault, Beside, and ScreenBridge. Each was extracted from the actual local repo by an analyze → adversarial-verify → write pipeline; the verify pass cut or corrected a real wrong number on every project before it shipped. Every claim cites real files; every number is measured. EN now; the loader falls back to EN for KO until KO versions are written. ScreenBridge and Meta-Smart-Glass: ScreenBridge done; Meta hit a rate limit mid-run and is the one remaining.

  2. Every project card now has a thumbnail — generated branded cards (next/og)

    Update

    Jun 20, 2026 · 1 min

    Closed the open follow-up from the project-index visual upgrade. Projects without a real product OG image now render a generated branded card (next/og) at a stable /projects/<slug>/card URL, so the index is uniform: featured row is three images, the rest are consistent cards — no empty boxes, no 0-star GitHub cards, no login-walled screenshots. Verified live-equivalent on a clean local build.

  3. Project pages led with text and nothing grabbed — a measured-metrics strip

    UX retro

    Jun 20, 2026 · 2 min

    Owner's read: per project, nothing grabbed at a glance. A live screenshot confirmed it — the project pages were title, description, buttons, role/stack, then the log timeline, all text, no hero for the four projects without a product OG image. Added a bold mono metrics strip under the description, filled with the verified numbers from each project's architecture deep-dive. The real fix — a product screenshot hero — still needs the owner for the login-walled and native apps.

  4. Repo renamed ddalkkak → talkak; blog re-pointed to the canonical name

    Update

    Jun 20, 2026 · 1 min

    Closed the last open item from the Talkak rename. The GitHub repo was renamed Daeseon-AI-Factory/ddalkkak → talkak (old URLs 301-redirect), so the GitHub pin now reads talkak. The blog re-points logSourceRepo, the architecture naming note, and the README repo link to the new name; logSourceDir stays dalkkak-ai (the log directory inside the repo is unchanged, verified 95 entries), and internal code identifiers (@ddalkkak packages, bundle id, tmux socket, data dir) are left as-is.

  5. Product rename: DalkkakAI → Talkak (brand + live domain only)

    Update

    Jun 19, 2026 · 1 min

    The terminal-deck product is now Talkak, live at talkak.daeseon.ai (ddalkkak.daeseon.ai 307-redirects there). Updated the user-facing name and live URL on the project page, /now, the about page, and the showep12 GitHub profile README. Left the repo name (still ddalkkak), internal code identifiers, the route slug, and dated log history unchanged — renaming those would be false or would break the cross-repo log pull.

  6. Talkak follow-through: slug → /projects/talkak, README rebrand, redirects

    Update

    Jun 19, 2026 · 1 min

    Completed the four follow-ups to the DalkkakAI→Talkak rename. Migrated the route slug dalkkak-ai→talkak (5-file git mv) with an explicit logSourceDir so the satellite log pull doesn't silently empty, added 308 redirects for old links and sub-pages, rebranded the full README mirror (brand + live domain only, internal ids kept), and fixed a stale name on the about page. The GitHub bio + pins could not be changed via API (missing token scope / no pin API) — left for the owner.

Week of May 25, 202624 entries · 3 Update · 8 Troubleshoot · 10 Tech retro · 3 UX retro
  1. Hook v3.1 — auto-suggest decision tier in block message

    Tech retro

    May 31, 2026 · 1 min

    Stop hook now classifies a triggered commit as T1 or T2 and prints the matching template slot list in the block message, so the author doesn't have to remember which template fits this commit.

  2. Install kit v2 — one URL now covers four hard-won satellite-onboarding gotchas

    Update

    May 31, 2026 · 3 min

    Folded four post-v1 lessons (slug ≠ repo name, quoted YAML dates, companion-in-portfolio-not-satellite, bilingual logs) plus an explicit Writing voice section into the install post and CLAUDE.md snippet. One URL handoff now suffices — no per-satellite addenda.

  3. Every project log entry detail page hung in production — Next.js dynamic-param collision

    Troubleshoot

    May 31, 2026 · 2 min

    All /projects/<slug>/log/<entry> pages were timing out indefinitely (curl: 60s, 0 bytes). The cause turned out to be the prior day's admin companion UI introducing a `[slug]` directory at the same level as the existing `[locale]` directory under app/(admin)/admin/projects/ — a Next.js dynamic-param-name conflict that production build silently emits and runtime then breaks SSR on. Fixed by moving the admin companion routes to app/(admin)/admin/logs/[project]/.

  4. Stop hook v3 — positive triggers override [no-log] for substantive commits

    Tech retro

    May 31, 2026 · 6 min

    Author judgment over routine-ness was unreliable about a third of the time. The hook now runs three positive triggers (LOC > 200, sensitive paths, subject keywords) that block the turn regardless of [no-log] tag. Silent overrides are disabled — false positives must annotate with a real rationale.

  5. Admin UI for log-entry companions

    Tech retro

    May 30, 2026 · 2 min

    Browser-based editor for <slug>.human.mdx companion files so they no longer have to be edited by hand on disk.

  6. Project timelines now accept a side-by-side human commentary per entry

    Update

    May 30, 2026 · 1 min

    Every AI-written log entry can now carry an optional <slug>.human.mdx companion. The detail page renders the two side-by-side on desktop (AI on the left, human on the right) and stacks them on mobile. Lets the human author add their voice without editing the AI artifact.

  7. Added a bilingual wiki — the knowledge content type was already there, just unrendered

    Update

    May 28, 2026 · 1 min

    Built /wiki v1: a 나무위키-style cross-linked glossary of technical terms, EN+KO, with [[term]] wiki-links. The knowledge content type already existed in the data layer; this was mostly the missing frontend + a small remark plugin.

  8. Admin project CRUD: full editor, featured toggle, GitHub-or-FS storage

    Tech retro

    May 27, 2026 · 2 min

    Added /admin/projects with list, create, edit, delete, and inline featured toggle, backed by a new lib/project-storage.ts that mirrors the post storage split (GitHub commit in prod, local FS in dev).

  9. Client component pulled node:fs into the browser bundle

    Troubleshoot

    May 27, 2026 · 1 min

    Vercel build failed with `You may need an additional plugin to handle node: URIs`. LogTimeline.tsx (client) imported lib/logs.ts (server), pulling node:fs into webpack's client bundle.

  10. Cross-repo log aggregation: each repo keeps its own, the portfolio pulls

    Tech retro

    May 27, 2026 · 3 min

    Added `logSourceRepo` to project frontmatter so each project's log timeline can be fetched from its own separate repo. Pull-on-demand with 30s ISR cache, no polling.

  11. Domain typo: daseon.ai vs daeseon.ai

    Troubleshoot

    May 27, 2026 · 1 min

    Project was bootstrapped with daseon.ai (one letter short). The real registered domain is daeseon.ai. Found at Vercel domain connection time.

  12. Image upload UX: from a tiny button to a real dropzone

    UX retro

    May 27, 2026 · 1 min

    Admin image upload worked the whole time, but I couldn't reliably find it. Fixed the discoverability instead of the mechanism.

  13. Designing the project-log system (this thing you're reading)

    Tech retro

    May 27, 2026 · 3 min

    Why I added a fourth content type for project logs, dual-wrote to a machine-facing reference and a human-facing timeline, and built explicit anti-hallucination rules.

  14. Stop hook: from reminder to enforcement (blocking + self-terminating sentinel)

    Tech retro

    May 27, 2026 · 3 min

    The original Stop hook nudged with a systemMessage, which Claude could ignore. Upgraded to decision:block + reason with a commit-hash sentinel that terminates the loop once a log entry exists.

  15. First cross-repo pull crashed the build — YAML parsed log dates as Date objects

    Troubleshoot

    May 27, 2026 · 2 min

    Adding docvault as the first cross-repo log source surfaced a latent bug: log entries with unquoted ISO dates parsed as Date instances instead of strings, ended up in JSX, and tripped the prerender.

  16. Why I split content into post / note / knowledge / log

    Tech retro

    May 26, 2026 · 2 min

    One bucket for everything fails three different audiences. Four content types with different visibility defaults each.

  17. EROFS on every Vercel publish — production fs is read-only

    Troubleshoot

    May 26, 2026 · 2 min

    Admin publish crashed with EROFS. Cause: I wrote to disk first, then committed to GitHub. Production fs is read-only.

  18. Why publish-to-live used to take 60s, and how I got it to 3-5s

    Tech retro

    May 26, 2026 · 2 min

    Production fs is a frozen build snapshot. Reading content through fs.readFile meant 60s of staleness per publish. Moved reads to GitHub Raw.

  19. Hobby photos on a dev portfolio: when they help and when they don't

    UX retro

    May 26, 2026 · 1 min

    I considered a 추억-style photo gallery on /about. Decided against. Kept a small slot for conference/maker/workspace shots only.

  20. Vercel refused to build with next-mdx-remote@5.x (CVE)

    Troubleshoot

    May 26, 2026 · 1 min

    First production build was blocked by Vercel's security scanner. Solved with a one-line dep bump.

  21. Sidebar width: 16rem felt empty, 13rem felt cramped, 14rem stuck

    UX retro

    May 26, 2026 · 2 min

    The hub layout (left sticky profile / right content) needed two rounds of width tuning before it stopped looking off.

  22. Live site returned 401 to everyone (Vercel Authentication on by default)

    Troubleshoot

    May 26, 2026 · 1 min

    Production URL was unreachable until I disabled Vercel's default deployment protection. No code change.

  23. MDX broke on `$\mathbb{R}^d$` with `R is not defined`

    Troubleshoot

    May 25, 2026 · 1 min

    Curly braces in math notation are JSX expressions to MDX. The build crashed on a sample embeddings post.

  24. Stack and storage: Next.js 15 + GitHub commit-as-database

    Tech retro

    May 25, 2026 · 1 min

    Why I picked Next.js 15 + Vercel + GitHub Contents API for storage instead of a database.