Skip to content

feat(web): bespoke per-project portfolio logos + single-source listing#216

Merged
JustAGhosT merged 1 commit into
mainfrom
feat/portfolio-logos
Jun 22, 2026
Merged

feat(web): bespoke per-project portfolio logos + single-source listing#216
JustAGhosT merged 1 commit into
mainfrom
feat/portfolio-logos

Conversation

@JustAGhosT

@JustAGhosT JustAGhosT commented Jun 22, 2026

Copy link
Copy Markdown
Collaborator

Portfolio logo pass + single-source consolidation

Investor-facing — please review before merging; not auto-merged.

1. Bespoke per-project logos (14)

A cohesive set under apps/web/public/logos/<id>.svg. Each is a self-contained rounded gradient tile + white glyph in the project's brand colour, so the same mark renders correctly in all three contexts — the starfield "sun" (circular-clipped), the project-detail hero, and the listing card. The detail/related/listing tiles use the existing image ? transparent pattern so the SVG provides its own background (no double-tile).

  • Replaces the ad-hoc /themes/*-icon.svg set.
  • Nexamesh gets its own shield+crosshair mark (was borrowing rooivalk-icon.svg).
  • Fills the four projects that had no logo: Sluice, Docket, ConvoLens, OmniPost.
  • Glyphs: Mystira=book+sparkle · CognitiveMesh=neural mesh · Nexamesh=shield+crosshair · Airkey=key+signal · VeritasVault=vault dial · Hop=hop arc+waves · Chaufher=steering wheel · CodeFlow=git branch+sparkle · Sluice=gateway/route · Docket=receipt+bars · ConvoLens=chat-in-lens · OmniPost=broadcast hub · PhoenixVC Website=globe · Design System=component blocks.

2. Kills the dual-array drift

The /portfolio listing had its own inline projects array, separate from PORTFOLIO_PROJECTS (the source the starfield + detail page use). They drifted — that's what broke the listing→detail link on the Rooivalk→Nexamesh rebrand. Now:

  • The listing derives from PORTFOLIO_PROJECTS; the inline array is gone.
  • Lucide fallback icons extracted to a shared projectIcons.tsx used by both the listing and the detail page.

Consolidation decisions to sanity-check

  • listed flag (new): phoenixvc-website and design-system are marked listed: false, so the public listing still shows the same 12 projects as before (these two internal infra items remain on the starfield only).
  • Links derive from the single product field (GitHub vs. website), exactly like the detail page. Effect: projects that previously had both a website and a GitHub button on the listing now show one, matching the detail page — VeritasVault → website; CodeFlow → the codeflow-engine GitHub (the old listing's autopr.io / autopr-engine links were stale).
  • Copy: card subtitle from a new tagline (ported verbatim from the old listing descriptions); paragraph from the existing bio.

Verification

  • vite build green; root eslint clean (0 errors).
  • Screenshotted live: /portfolio (renders "12 of 12"), /portfolio/sluice, /portfolio/nexamesh — logos render in cards + heroes, links correct.

Summary by CodeRabbit

  • New Features

    • Portfolio projects now include custom taglines to provide better descriptions and context for each initiative.
  • Style

    • Enhanced project icon display with improved image sizing and aspect ratio handling.
    • Refined visual presentation of portfolio entries with reorganization and selective unlisting.

Add a cohesive set of 14 brand SVG logos (one per project — each a
rounded gradient tile with a white glyph in the project's brand color)
under public/logos and wire them through PORTFOLIO_PROJECTS.image. The
starfield suns, project-detail heroes and listing cards now all render
the same bespoke mark. Replaces the ad-hoc /themes icons and the
Nexamesh -> rooivalk placeholder; fills the four projects that had no
logo (Sluice, Docket, ConvoLens, OmniPost).

Consolidate the /portfolio listing onto the single source of truth: the
duplicate inline `projects` array in features/portfolio is removed; the
listing now derives from PORTFOLIO_PROJECTS (filtered by a new `listed`
flag, links derived from the single `product` field, subtitle from a new
`tagline`). This kills the dual-array drift that previously broke the
listing -> detail link on the Rooivalk rebrand. The lucide fallback
icon map is extracted to a shared projectIcons module consumed by both
the listing and the detail page.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jun 22, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

Pull request was closed or merged during review

📝 Walkthrough

Walkthrough

Adds optional tagline and listed fields to the PortfolioProject interface. Updates 14 project entries to use /logos/*.svg image paths and adds taglines; two entries are marked listed: false. Extracts a new shared getProjectIcon helper. Refactors the portfolio list and detail views to render logo images with transparent backgrounds, falling back to the shared icon helper.

Changes

Portfolio logo images, taglines, and icon refactor

Layer / File(s) Summary
PortfolioProject contract and dataset updates
apps/web/src/constants/portfolioData.ts
Adds optional tagline?: string and listed?: boolean to the PortfolioProject interface. Updates 14 project entries: migrates image paths from /themes/*-icon.svg to /logos/*.svg, adds tagline strings, and marks PhoenixVC Website and Design System as listed: false.
Shared getProjectIcon helper
apps/web/src/features/portfolio/projectIcons.tsx
New file defining an ICONS map from project ID strings to lucide-react components and exporting getProjectIcon(id, size?), which returns the mapped icon or falls back to Layers at the given size.
Portfolio list and detail icon/image rendering
apps/web/src/features/portfolio/index.tsx, apps/web/src/features/portfolio/ProjectDetail.tsx, apps/web/src/features/portfolio/Portfolio.module.css
index.tsx replaces the in-file static dataset and local config records with imports from shared constants, updates the Project view model and toCardProject mapper, filters out unlisted entries, and renders a logo <img> or getProjectIcon fallback per card using STATUS_CONFIG/FOCUS_AREA_CONFIG for pill styling. ProjectDetail.tsx switches hero and related-project icon selection to getProjectIcon and sets backgroundColor to transparent when a logo image is present. CSS adds .projectIconImage sizing logo images to fill the icon tile with object-fit: contain.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • phoenixvc/phoenix-website#209: Directly modifies PORTFOLIO_PROJECTS project objects and schema-related fields in portfolioData.ts, the same file this PR extends with tagline and listed fields.
  • phoenixvc/phoenix-website#214: Extends the icon mapping logic in ProjectDetail.tsx for new project IDs, which this PR refactors into the shared getProjectIcon helper.

Poem

🐰 Hippity-hop, the logos are new,
/logos/*.svg replaces the few!
A tagline for each, listed to hide,
getProjectIcon beckons with pride.
Transparent when images appear,
The portfolio blooms — oh what a year! 🌸

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the two main changes: introducing per-project portfolio logos and consolidating the portfolio data to a single source of truth.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/portfolio-logos

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@JustAGhosT JustAGhosT merged commit ad326bf into main Jun 22, 2026
1 of 2 checks passed
@JustAGhosT JustAGhosT deleted the feat/portfolio-logos branch June 22, 2026 23:21
JustAGhosT added a commit that referenced this pull request Jun 22, 2026
features/genai-projects (a GenAIProjects component + its CSS module) is
exported but imported and routed nowhere — it never renders. It also
carried a third stale copy of the portfolio data with pre-rebrand
Rooivalk URLs (phoenixrooivalk.com, github.com/JustAGhosT/PhoenixRooivalk),
the same drift class just consolidated away in #216. The canonical
listing lives in features/portfolio backed by PORTFOLIO_PROJECTS.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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