Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
2fb415d
Add V2 roadmap for CMS and AI acceleration
Ultraivanov Apr 15, 2026
353515f
Add GitHub draft intake MVP and blueprint cover samples
Ultraivanov Apr 15, 2026
f929683
Add runtime route crawl and screenshot planning for GitHub intake
Ultraivanov Apr 15, 2026
33e24b1
Implement runtime screenshot import into case assets
Ultraivanov Apr 15, 2026
7a767df
Switch GitHub intake to LLM-first analysis mode
Ultraivanov Apr 15, 2026
4f59ac1
Run extractor only from LLM-issued intake commands
Ultraivanov Apr 15, 2026
bf4813d
Add explicit create-case flow to CMS admin
Ultraivanov Apr 16, 2026
4ab7d73
feat(cms-ai): add draft quality checklist and sync codex workflow state
Ultraivanov Apr 16, 2026
a912b5c
feat(cms-ai): add intake confidence summary for github drafts
Ultraivanov Apr 16, 2026
b52728e
feat(cms-ai): harden runtime artifact auto-mapper merge
Ultraivanov Apr 16, 2026
cc00f99
feat(cms-ai): add rule-based consistency QA report
Ultraivanov Apr 17, 2026
b39b7a7
feat(cms-ai): add one-click case starter apply flow
Ultraivanov Apr 17, 2026
2f3fa9e
feat(cms-ai): add section-level evidence coverage mapping
Ultraivanov Apr 17, 2026
2bc6e24
feat(cms-ai): add blueprint cover candidate flow
Ultraivanov Apr 17, 2026
ab3285f
feat(cms-admin): add sticky save bar and dirty state tracking
Ultraivanov Apr 17, 2026
768e2d8
feat(cms-admin): add live validation and save readiness state
Ultraivanov Apr 17, 2026
b3224f3
refactor(admin): extract AI intake panel component
Ultraivanov Apr 17, 2026
6f12af2
feat(intake): add deterministic narrative rewrite suggestions
Ultraivanov Apr 18, 2026
37b3229
feat(admin): apply rewrite suggestions in one click
Ultraivanov Apr 18, 2026
380e5f3
refactor(admin): extract sections editor component
Ultraivanov Apr 18, 2026
4395bcd
feat(admin): support bulk apply for rewrite suggestions
Ultraivanov Apr 18, 2026
d997c5c
feat(cms): add baseSha optimistic locking for case saves
Ultraivanov Apr 18, 2026
64bae7a
test(cms): add concurrent save race coverage for baseSha locking
Ultraivanov Apr 18, 2026
4504ab5
feat(cms): honor retry-after date and seconds in github retries
Ultraivanov Apr 18, 2026
3b5031b
feat(cms): add structured audit logs for save and upload APIs
Ultraivanov Apr 18, 2026
4d9477b
test(svg): add malicious and edge fixture coverage
Ultraivanov Apr 18, 2026
1701902
feat(upload): enforce strict public/cases path policy
Ultraivanov Apr 18, 2026
4c77e20
refactor(cms): fail fast on legacy media variant fields
Ultraivanov Apr 18, 2026
5e87f3b
feat(cms): add orphan cleanup flow for upload and save failures
Ultraivanov Apr 18, 2026
e52d630
test(cms): add admin smoke flow for upload save reload
Ultraivanov Apr 19, 2026
205ab50
chore: clean lint warnings and update home builds section
Ultraivanov Apr 19, 2026
1e514d7
test(cms): enforce legacy embed and variant cleanup guards
Ultraivanov Apr 19, 2026
23b749a
chore(codex): close r02 and hand off to r03 launch checklist
Ultraivanov Apr 19, 2026
6bccb65
docs(release): define launch checklist scope and gates
Ultraivanov Apr 19, 2026
8f59098
docs(release): record launch readiness evidence and blockers
Ultraivanov Apr 19, 2026
af83b94
docs(release): add go-live playbook and complete R-03-T3
Ultraivanov Apr 19, 2026
b6074df
docs(release): capture R-03-T4 no-go review snapshot
Ultraivanov Apr 19, 2026
c1d8552
refactor(cms-auth): remove KEYSTATIC env fallback and align release docs
Ultraivanov Apr 20, 2026
8a5402d
chore(roadmap): close R-03 release readiness
Ultraivanov Apr 20, 2026
88a907c
fix(admin): keep AI intake visible when no case is loaded
Ultraivanov Apr 21, 2026
366ae54
feat(seo): add agent-native robots sitemap and checks
Ultraivanov Apr 21, 2026
bdda851
feat(seo): add work metadata and slug-safe case pages
Ultraivanov Apr 21, 2026
f9cbf5a
feat(seo): add metadata for legal contact and perf-test noindex
Ultraivanov Apr 21, 2026
69f2a8a
Implement CMS session login flow and auth guards
Ultraivanov Apr 22, 2026
0af8fbb
feat(case): automate metadata updates and sync case seo ui
Ultraivanov Apr 22, 2026
eebcf70
feat(seo): expose case update dates in sitemap and og metadata
Ultraivanov Apr 22, 2026
b15a0ce
Merge origin/main into codex/v2-roadmap-cms-ai
Ultraivanov Apr 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions .codex/PHASES.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,10 @@

| Field | Value |
|------------|--------------------------------|
| Block ID | R-02 |
| Title | Documentation and workflow consistency |
| Status | in-progress |
| File | `.codex/blocks/BLOCK-TEMPLATE.md` |
| Block ID | R-03 |
| Title | Launch checklist |
| Status | done |
| File | `.codex/blocks/R-03.md` |

---

Expand Down Expand Up @@ -60,8 +60,8 @@
| ID | Block | Status |
|------|-------------------------------|---------|
| R-01 | Visual polish + regression | in-progress |
| R-02 | Performance + QA | in-progress |
| R-03 | Launch checklist | pending |
| R-02 | Performance + QA | done |
| R-03 | Launch checklist | done |

---

Expand All @@ -73,4 +73,4 @@

---

_Last updated: 2026-04-13_
_Last updated: 2026-04-20_
47 changes: 40 additions & 7 deletions .codex/SNAPSHOT.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
# Snapshot — Portfolio Project

Date: 2026-04-13
Status: Production ready (public site + CMS + case content)
Date: 2026-04-16
Status: Production-ready site + active V2 CMS/AI acceleration track
Source of truth: this file (`.codex/SNAPSHOT.md`)

## Workflow State
- `.codex` phase/block/task routing is synchronized: active block `R-02` now points to `.codex/blocks/R-02.md`.
- Session work follows approval gates: Change Plan -> user `yes` -> implementation -> separate commit/push confirmations.

## Product Context
- Portfolio for product designer (Dima Ginzburg)
- Positioning: product-first, minimal/brutalist, content-driven
Expand All @@ -25,12 +29,15 @@ Source of truth: this file (`.codex/SNAPSHOT.md`)
- `/admin` — custom GitHub-backed CMS
- `/perf-test` — diagnostics page
- `/api/cases`, `/api/contact`, `/api/save-content`, `/api/upload-image`, `/api/theme`
- `/api/intake/github` — AI draft intake from GitHub signals
- `/api/intake/github/runtime-import` — runtime screenshot import into case assets

## Content Model
- Content source: `src/content/` JSON + typed loader (`src/content/cases.ts`)
- Case files: `src/content/cases/*.json`
- Homepage source: `src/content/home.json`
- Case block types: `paragraph`, `list`, `link`, `media`
- Case structure target for AI drafts: Context, Problem, Constraints, Role, Approach, Solution, Outcome

## Current Case Slugs (ordered)
1. `travel-booking-platform`
Expand All @@ -39,19 +46,45 @@ Source of truth: this file (`.codex/SNAPSHOT.md`)
4. `my-perfect-greek-vacation`
5. `design-system-runtime`

## CMS Status
## CMS + AI Status
- Admin UI: `src/app/admin/page.tsx`
- Save pipeline: GitHub API commit flow via `/api/save-content`
- Image upload: `/api/upload-image`
- Auth: basic auth vars (`CMS_ADMIN_USER`, `CMS_ADMIN_PASSWORD`) in `middleware.ts`
- GitHub AI intake implemented (MVP):
- Signals: repo metadata + README + merged PRs + closed issues
- Modes: `llm` (default) and `heuristic`
- Evidence links + route candidates + runtime screenshot plan are exposed in UI
- Draft-only application with user confirmation remains default behavior
- Runtime screenshot import implemented:
- Extractor command `import_runtime_screenshot`
- Uploads to `public/cases/<slug>/...`
- Auto-applies imported assets into `Visual Artifacts`

## AI Runtime/Config Notes
- Required for LLM mode: `OPENAI_API_KEY`
- Optional model override: `GITHUB_INTAKE_LLM_MODEL` (default in code: `gpt-4.1-mini`)
- Optional screenshot template: `GITHUB_INTAKE_SCREENSHOT_TEMPLATE`
- GitHub write path for CMS/extractor: `GITHUB_PAT`, `GITHUB_REPO`, `GITHUB_BRANCH`

## Roadmap Gap Status (as of 2026-04-16)
- 4.1 Repo -> Case Draft: baseline implemented
- 4.2 Narrative Gap Detector: pending
- 4.3 Artifact-to-Block Auto Mapper: partial (runtime screenshot import + media/link merge present)
- 4.4 Case Consistency QA Bot: pending
- 4.5 One-Click Case Starter: pending

## Workspace Hygiene Notes
- Unexpected duplicate files with suffix ` 2` were detected in `src/`, `cms-extract/`, and `public/`.
- Most are byte-identical copies; some are older intermediate revisions.
- They are not part of the active source-of-truth paths and should be cleaned in a dedicated hygiene pass.

## Git/Workspace Notes
- Main branch: `main` (local was behind `origin/main` during this snapshot)
- Local worktrees were used for parallel agent edits under `.claude/worktrees/`
- Main branch: `main`
- Canonical workflow files: `.codex/*`
- Legacy assistant workflow files are retained but should not be used as active status tracking

## Known Follow-ups
- Keep `.codex/SNAPSHOT.md` updated after meaningful project changes
- Keep `README.md` aligned with real project state (not starter template text)
- Avoid tracking local worktree paths in Git index
- Keep `README.md` aligned with real project state (including AI intake env vars)
- Resolve duplicate `* 2.*` files in a controlled cleanup pass
Loading
Loading