Skip to content

merge: dev → main — favicon + logo-everywhere + OG banner + URL replace#11

Merged
vkkatariya merged 32 commits into
mainfrom
dev
Jun 30, 2026
Merged

merge: dev → main — favicon + logo-everywhere + OG banner + URL replace#11
vkkatariya merged 32 commits into
mainfrom
dev

Conversation

@vkkatariya

Copy link
Copy Markdown
Owner

Summary

This PR merges the dev branch to main, shipping the following work that's been reviewed and approved via individual PRs:

Commits in this PR (30 total)

PR #8 — favicon fix

  • `fee0fb9` docs(devlog): add fix/favicon-borders session entry
  • `def271f` Merge pull request fix(favicon): regen all assets with enhanced contrast (option C) #8 from vkkatariya/fix/favicon-borders
  • `e6a50c2` fix(favicon): regen all assets with enhanced contrast (option C)
  • `12c994e` docs(lessons): L-068 — don't merge favicon work without visual verification
  • `ee33fe2` docs(tasks): favicon-borders fix kickoff + flag prior merge regression

PR #9 — logo everywhere

  • `e2bf547` docs(devlog): add feat/logo-everywhere session entry
  • `6660a23` feat(portfolio): add glass VK logo to 7 places (logo-everywhere)
  • `3e90314` docs(tasks): kickoff for logo-everywhere (7 sub-places, one shot)

PR #10 — OG banner rebuild

  • `fda821e` Merge pull request feat(portfolio): rebuild OG banner + replace vishalkatariya.dev domain #10 from vkkatariya/feat/og-banner-rebuild
  • `b002b09` docs(devlog): add feat/og-banner-rebuild session entry
  • `24a1e1b` feat(portfolio): rebuild OG banner as business-card widget + replace vishalkatariya.dev domain
  • `c841dc2` docs(todo): add Phase 1g latency optimization task (deferred)
  • `c0d1620` docs(tasks): kickoff for OG banner rebuild + global URL replace

Cleanup

  • `ff1f088` chore(cleanup): remove merged branch kickoff files + agent temp
  • `f1fbaf7` merge: favicon assets + multi-format block across 7 HTML files (regression — superseded)
  • `7ddc388` docs(tasks): favicon kickoff + identify 7 topbar-logo sub-places
  • `e5e01a2` docs(tasks): favicon kickoff + identify 3 sub-place topbar-logo tasks
  • `83c8ecc` feat(portfolio): add multi-format favicon from approved glass VK logo (regression — superseded)

Dual-session + dual-session doc

  • `5c4c2e8` docs(claude): remove dead reference to deleted CLAUDE-CODE-WORKFLOW-REPORT.md
  • `3e9c242` Revert "style(homepage): redesign redirect splash with branded entrance animation"
  • `50bc90d` style(homepage): redesign redirect splash with branded entrance animation (reverted)
  • `f9dfe47` merge: claude/local → dev (docs: clarify cloud session is browser-started)
  • `55ccab2` fix(docs): clarify cloud session is Anthropic container, started from browser
  • `bd2acda` merge: claude/cloud → dev (cloud session lineage)
  • `a4c3de6` merge: claude/local → dev (local session lineage)
  • `0068550` merge: feat/claude-cloud-smoke → claude/cloud
  • `ec30473` chore(cloud): smoke-test commit on claude/cloud lineage
  • `8daabc3` merge: feat/claude-local-smoke → claude/local
  • `7913892` chore(local): smoke-test commit on claude/local lineage
  • `f61cc8a` fix(docs): remove worktree paths from CLAUDE.md, use lineage branches
  • `5515582` docs(claude): add dual-session (local+cloud) block to CLAUDE.md

Files changed

34 files changed, 426 insertions, 33 deletions

Key new assets:

  • 9 favicon files (favicon.ico, favicon.svg, apple-touch-icon.png, icon-192/512/mask.png, favicon-16/32.png, site.webmanifest)
  • 4 logo derivatives (logo-128/256/512/cropped.png)
  • 1 OG image (og-image.png, 1200×630)
  • source logo.png (1.39 MB)

Audit notes (Hermes, 2026-06-30)

✅ All 9 favicon assets present, sizes sane
✅ All 5 logo derivatives present
✅ og-image.png 1200×630, 96KB, valid PNG
✅ All 7 HTML files have favicon + OG meta blocks
✅ vishalkatariya.dev replaced with vishal-katariya.com in all 10 live-facing files (HTML + docs)
✅ No working-tree noise (clean)
✅ No regressions in index.html (unchanged from main, latency work deferred to Phase 1g)
✅ All work pre-reviewed via PR #8, #9, #10 (each had a separate visual QA cycle per L-068)

Known non-blockers

  • `vishalkatariya.dev` still appears in 3 task files (todo.md, design-dual-deployment.md, DEVLOG.md) as historical context. Agent's PR feat(portfolio): rebuild OG banner + replace vishalkatariya.dev domain #10 correctly scoped to live-facing files. Address in next pass if needed.
  • Index.html still has meta refresh + JS redirect (unchanged from main). Latency optimization work is queued in Phase 1g per user instruction (2026-06-30).

Vercel deployment

Auto-deploys on push to `main`. Live at https://vishal-katariya.com after merge.

vkkatariya and others added 30 commits June 30, 2026 16:23
Captures the v2 architecture from workflow/SESSION-WORKFLOW.md in the
form Claude Code reads at session start:

- Names: [portfolio-website]-local (athena tmux) and -cloud (Anthropic)
- Worktree setup commands (one-time per machine)
- Cloud-for-what vs local-for-what split
- Cross-session handoff via tasks/DEVLOG.md top-3 read
- /remote-control correction (not /rc — that's hallucinated)
- PreCompact hook reference (already in .claude/settings.json)
- Pro plan 5hr rolling limit warning
- Reference to ./workflow/CLAUDE-CODE-WORKFLOW-REPORT.md

30 insertions, 1 deletion. Other projects (openclaw-dashboard,
hermes-desktop-oauth) got the same block in their own CLAUDE.md
(untracked changes there — no commits yet).
User correction (2026-06-30): dual-session model is about the
claude/local and claude/cloud BRANCHES, not separate worktree
directories. The worktree pattern requires users to be in
multiple directories simultaneously, which is more complexity
than the user asked for.

Reverts the worktree-specific section that I added in the previous
commit, replaces with a branches-as-lineage-markers model:
  - claude/local and claude/cloud are branch markers (not dirs)
  - Each session works on sub-branches off its lineage
  - feat/<task>-local → claude/local → dev
  - feat/<task>-cloud → claude/cloud → dev
  - One session at a time (no worktree split, no parallel write)
  - When both sessions need to write same day: sub-branches, then merge

Also updates workflow references to say 'lineage branches' instead
of 'worktrees'.

Local file ~/dev-shared/workflow/SESSION-WORKFLOW.md was also updated
out-of-band (workflow dir is not a git repo).
Marker commit to exercise the dual-session branch discipline:
work happens on feat/<task> sub-branches off claude/local,
then merges to claude/local → dev.
Marker commit to exercise the dual-session branch discipline:
work happens on feat/<task> sub-branches off claude/cloud,
then merges to claude/cloud → dev.
Conflict in CLAUDE.md resolved by keeping both session markers
(local + cloud smoke-test comments at end of file).

Merge chain on dev:
  7913892 feat/claude-local-smoke
  8daabc3 merge → claude/local
  ec30473 feat/claude-cloud-smoke
  0068550 merge → claude/cloud
  a4c3de6 merge → dev (local)
  (this commit) merge → dev (cloud)
… browser

User correction (2026-06-30): my mental model had the cloud session
wrong. Re-reading Claude Code docs:

  - 'Remote Control' = relay to a CLI process on YOUR machine. Started
    with 'claude --remote-control' or 'claude remote-control'. Full local
    FS access.

  - 'Claude Code on the web' = a SEPARATE thing. Anthropic cloud
    container. Started from https://claude.ai/code → Code tab → New
    session. Only sees the GitHub repo. No local FS, no Docker, no
    '.env.local', no local servers.

The 'cloud session' the user described is the second one. My CLAUDE.md
was conflating the two (suggested 'claude remote-control --name' for
cloud, which would have created a relay session on athena with a
'cloud' name, not an actual cloud container).

Fixes:
  - Remove all 'worktree' references (reverted in earlier commit but
    a few references had slipped back in)
  - Add explicit 'How to start the cloud session' instructions
    (browser, not CLI)
  - Add explicit 'What cloud session sees / cannot do' list
  - Add 'vercel deploy: no auth' warning to local-vs-cloud table
  - Add 'no local FS access' note to every cloud row
  - Replace the 'worktree add' one-time setup with the simple
    'git branch claude/{local,cloud} dev' setup

Local file ~/dev-shared/workflow/SESSION-WORKFLOW.md also updated
out-of-band (workflow dir is not a git repo).
…rted)

Conflict resolution: kept the new descriptive session block (local + cloud with filesystem/process/branch details) over the older compact version. Kept the new workflow description that mentions 'local relay + Anthropic cloud'.
…tion

VK monogram reveal in Cormorant Garamond italic, liquid-glass card,
dot-grid bg, green progress bar — matches portfolio design system.
Removes instant meta refresh; fade-to-black at 2150ms, navigate at 2550ms.
Respects prefers-reduced-motion (instant redirect).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…EPORT.md

The report file was cleaned up; CLAUDE.md symlink list should not point
to a file that no longer exists. Remaining workflow references point to
files that still exist in ~/dev-shared/workflow/.
Source: prototypes/assets/logo.png (1254×1254 glass VK monogram, approved by Vishal).
Derived without redrawing. All assets in prototypes/assets/:

  favicon.ico          7KB   ICO container (16+32+48px) — legacy browsers
  favicon.svg          9KB   PNG-in-SVG + dark-mode media query — modern browsers
  favicon-32x32.png    2KB   PNG fallback
  favicon-16x16.png    1KB   PNG fallback
  apple-touch-icon.png 22KB  180×180 solid bg (#080808), 10% padding — iOS
  icon-192.png         30KB  PWA / Android
  icon-512.png        192KB  PWA splash / desktop shortcuts
  icon-mask.png       155KB  512×512 maskable (10% safe-zone padding) — Android
  site.webmanifest      551B PWA manifest (JSON validated)

Root favicon.ico copy at / for browser auto-request at domain root.

Head block wired to all 7 HTML files. Relative paths throughout (L-060):
  prototypes/*.html → assets/...
  index.html        → prototypes/assets/...

Playwright: 6/6 prototype pages confirmed tags present + link hrefs resolve.
index.html confirmed via grep (meta-refresh redirects before DOM eval).
htmlhint: 8 files, 0 errors.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- tasks/kickoff-favicon.md: full kickoff for converting assets/logo.png
  into a working multi-format favicon. Covers 7 HTML files, 7 derived
  assets, dark-mode SVG variant, webmanifest, theme-color meta.
  Dispatched by Vishal 2026-06-30.

- tasks/todo.md: Phase 0 'Brand assets' section now has 3 sub-place
  topbar-logo tasks identified:
  1. Topbar pill (left) — scroll-responsive wordmark→logo fade
  2. Profile icon (top right pill) — replace 'VK' initials with logo SVG
  3. Open Graph image (1200×630) for social share previews

Also updated favicon task status to 'agent dispatched'.
Agent completed favicon task on feat/favicon (83c8ecc) + tasks updates (e5e01a2, 7ddc388).

Audit (2026-06-30, Hermes):
- All 7 HTML files updated with favicon <head> block
- All 9 derived assets in place (favicon.ico 7KB, favicon.svg 9KB,
  apple-touch-icon.png 22KB, icon-192/512/mask.png, site.webmanifest 551B)
- site.webmanifest valid JSON, 3 icons including maskable
- favicon.svg has light media query (default = dark) for theme adaptation
- All asset paths are relative (per L-060 cross-backend rule)
- All 10 favicon URLs return HTTP 200 with correct content-types
- All 28 link hrefs resolve to real files

No code-level issues. Visual QA requires user eyes (L-066). User approved.

Per branch discipline: keep feat/favicon branch on remote, no delete.
User reported (2026-06-30) deployed favicon has visible black borders.
Prior agent's favicon work (commit 83c8ecc, merged f1fbaf7) shipped assets
derived from a 1254x1254 logo with 64-204px black borders + dark glass
shadow that extends to canvas edges. V/K not legible at 16x16.

Visual QA was skipped during the prior audit — L-066 in lessons.md
called this out and I didn't enforce. Per kickoff, the new fix agent
must visually verify at 16/32/180/192/512 before committing.

Kickoff: tasks/kickoff-favicon-borders-fix.md
- Crop new logo (1108x1122) to V/K content (1090x985)
- Add 5% padding, square to 1024x1024
- Composite on clean background (white recommended)
- Re-derive all 9 favicon assets
- Visual QA via Playwright before commit
- Mandatory DEVLOG entry (don't skip)

Branch: fix/favicon-borders off dev
Not yet dispatched. Vishal will dispatch.
…cation

Per L-066 (vision_analyze empty on local paths), the next-best option is
to render previews and have the user eyeball them. Trusting the bytes
was the wrong call for favicon work — the V/K was unreadable at 16x16
due to dark glass shadow extending to canvas edges. Re-derivation work
queued in todo.md + kickoff-favicon-borders-fix.md.
Replace previous favicon set (had visible border/black fringe) with new
1108×1122 source logo processed at 1.6× contrast + 1.3× brightness.
Regenerates ico/svg/png/apple-touch/192/512/mask + logo-cropped.png
source. All sizes verified readable at 16px.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
fix(favicon): regen all assets with enhanced contrast (option C)
Vishal asked for all 7 sub-places from Brand assets section of todo.md in
one coherent design pass. Kickoff covers:
  1. topbar pill scroll-swap
  2. profile icon (right pill)
  3. OG image + meta tags (all 7 HTML files)
  4. hero identity widget
  5. about page photo block
  6. resume.html header
  7. /me private auth card

Uses existing prototypes/assets/logo.png as source. Generates 3 size
derivatives (128/256/512) + og-image.png (1200x630). Visual QA required
before commit per L-068. Branch: feat/logo-everywhere off dev.
- Sub-place 1: topbar pill scroll-swap — wordmark fades out, logo mark
  fades in past 80px scroll, pill shrinks (rAF-debounced scroll listener)
- Sub-place 2: profile icon (right pill) — VK text → logo fills circle,
  glass ring border, no gradient background
- Sub-place 3: OG image (1200×630) generated + og:image/twitter:card
  meta tags added to all 7 HTML files
- Sub-place 4: hero identity widget — person SVG replaced with logo mark
- Sub-place 6: resume.html header — small logo mark above name
- Sub-place 7: /me auth card — VK gradient circle → logo with glass ring
- Assets: logo-128.png, logo-256.png, logo-512.png, og-image.png added
- Sub-place 5 (about photo block) removed — did not look good there

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
feat(portfolio): add glass VK logo to 6 places
Vishal's review of the prior og-image (2026-06-30):
- Too dark, wants lighter background matching site
- Doesn't look like a widget (should be widget-block style)
- Plain 'Vishal Katariya' text — wants calligraphic Cormorant Garamond name
- Generic sans for role labels — wants DM Mono / JetBrains Mono
- Only one URL: vishalkatariya.dev (wrong — site is on vishal-katariya.com)
- 'Infrastructur' label truncated in current banner

Kickoff: tasks/kickoff-og-banner-rebuild.md
- New og-image.png (1200x630) combining IDENTITY + CONTACT widget treatment
- Glass widget-block with dot-matrix backdrop
- Calligraphic V/K name + monospaced pills + green status + 3 contact lines
- Global vishalkatariya.dev → vishal-katariya.com in 13 files
- Visual QA via Playwright HTML composition (Approach B for typography)
- Branch: feat/og-banner-rebuild off dev
Vishal asked (2026-06-30) to defer site opening latency work but track
it in todo. Currently ~400ms cold (Vercel analytics), goal <200ms.

Three layered causes:
- 308 redirect bare→www (~150ms, first visit only)
- meta refresh + JS redirect in index.html (~200ms, every visit)
- 369KB single-file payload (~200-300ms cold)

Priority order (cheapest first):
1. Eliminate meta refresh redirect (saves 200-300ms)
2. Cache-Control: max-age=300 on portfolio-combined.html
3. Preconnect + dns-prefetch
4. Minify HTML
5. Lazy-load 137 inline SVG icons
6. Extract + minify CSS

Realistic target after #1-#4: 150-200ms cold, 50-100ms warm.
Long-term solved by Phase 1 SvelteKit migration.

Decisions needed before starting: option A vs B, update cadence,
URL pattern change.
…vishalkatariya.dev domain

Rebuild prototypes/assets/og-image.png via Playwright HTML render (Approach B)
instead of Pillow, matching the live site's glass-widget aesthetic: real
glass-bg/border/shadow tokens, Cormorant Garamond script + Syne 800 wordmark,
status pill, skill pills, contact pills. Iterated with Vishal across 6 rounds
of visual sign-off before commit (L-068).

Replace vishalkatariya.dev -> vishal-katariya.com across all live-facing
surfaces (rendered HTML pages, README, CONTEXT.md, architecture docs) since
that's the actual live Vercel domain. Left tasks/todo.md, tasks/DEVLOG.md, and
tasks/design-dual-deployment.md untouched — they document the real registrar
redirect-loop issue specific to the .dev domain, not a live link.

Added missing og:url meta tags across all 7 live HTML files (kickoff assumed
they existed from the favicon task; they didn't).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
vkkatariya and others added 2 commits June 30, 2026 22:39
feat(portfolio): rebuild OG banner + replace vishalkatariya.dev domain
After feat/og-banner-rebuild merged to dev via PR #10 (fda821e),
the work is no longer in flight. Per branch discipline (L-067, one
batch delete at session end), cleaning up:

- 4 kickoff files (tasks/kickoff-{favicon,favicon-borders-fix,
  logo-everywhere,og-banner-rebuild}.md) — agents have already
  completed their work, kickoffs are no longer needed
- 1 agent temp file (prototypes/assets/_og-template.html) — used by
  the OG banner agent to render the new og-image.png, never committed
  to git, just removed from working tree
- feat/og-banner-rebuild branch (local + remote) — work is merged

Kickoff history is preserved in git log (commits 3e90314, c0d1620,
etc.) so the rationale is still accessible via git history if needed.
@vercel

vercel Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
portfolio-website Ready Ready Preview, Comment Jun 30, 2026 8:45pm

@vkkatariya
vkkatariya merged commit 75b1571 into main Jun 30, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant