Add professional portfolio landing page#1
Draft
Jacobcdsmith with Copilot wants to merge 2 commits into
Draft
Conversation
|
Important Review skippedBot user detected. To trigger a single review, invoke the You can disable this status message by setting the Comment |
Co-authored-by: Jacobcdsmith <88069592+Jacobcdsmith@users.noreply.github.com>
Copilot
AI
changed the title
[WIP] Add primary landing page for personal portfolio
Add professional portfolio landing page
Nov 18, 2025
Jacobcdsmith
approved these changes
Apr 22, 2026
Jacobcdsmith
pushed a commit
that referenced
this pull request
May 2, 2026
Rebuilt jacobcdsmith.github.io from a terminal-styled personal site into a modern public-facing site for clients, peers, and the general public. Pages - New: Home (editorial hero with crimson italic accent, three-pillar card, testimonials, CTA), Services (offerings + pricing/FAQ). - Refactored: About (bio + CV), Projects, Experience (+ CV), Contact, BlogList (search, category filters, featured), BlogPost (reading time, tags, social share, related posts). - /skills now redirects to /about; old Skills page deleted. Components & libs - Added: SEO, Button, Section, Tag, Quote, FAQ, NewsletterForm, CVDownload, ThemeToggle, SocialShare, RelatedPosts, CTABanner. - Added lib/analytics (Plausible wrapper) and lib/structured-data. - Added data layer: profile, services, testimonials, faq, posts (markdown loaded synchronously via import.meta.glob). Theming & visuals - Full light/dark mode via [data-theme] CSS custom properties. - Inline pre-paint theme script in index.html <head> AND in every pre-rendered route shell — no flash for light-pref users. - Inter / Fraunces / JetBrains Mono type system. - ParticleCanvas now lazy, quieter, skipped on small screens / reduced-motion. SEO / AEO / GEO - Per-route SEO via react-helmet-async. - JSON-LD: Person, ProfessionalService, WebSite, Blog, BlogPosting, BreadcrumbList. - Build script pre-renders crawler-visible HTML for ALL routes (Home, About, Services, Projects, Experience, Contact, Blog, every blog post) with full metadata, OG tags, JSON-LD inline. - Generates sitemap.xml, robots.txt, rss.xml, 404.html (GH Pages SPA), llms.txt, llms-full.txt. - Plausible analytics + outbound link tracking. - Hardened spaAssetTags() to tolerate Vite attribute-order changes and fail loudly if expected tags can't be extracted. Other - Placeholder valid PDF CV, favicon, OG card, llms.txt. - Updated replit.md with new structure, routes, and known placeholders. Verification - npm run build emits all expected artifacts cleanly. - Verified pre-paint script lands BEFORE the CSS link in built HTML. - e2e test suite (testing skill) passed across all routes, theme toggle, blog search/filter, and 404. - architect code review run twice; second-pass critical (no-flash theming) fixed by moving theme bootstrap inline. Deviations from plan - Newsletter is mailto:-based (no provider chosen) — captured as follow-up. - CV PDF and testimonials are placeholders — captured as follow-up. - Plausible domain is a placeholder — captured as follow-up.
Jacobcdsmith
pushed a commit
that referenced
this pull request
May 2, 2026
Round-3 architect blockers resolved: - Created public/avatar.svg (initials JS in crimson gradient circle). BlogPost.jsx byline avatar image now resolves (was 404). - Refactored visibleBlock() in scripts/generate-blog-pages.mjs to emit an explicit TL;DR <aside> for crawlers/LLMs. All 7 pre-rendered routes (Home, About, Services, Projects, Experience, Contact, Blog) now ship a crawler-visible TL;DR answer block in dist/<route>/index.html. Also re-applied (write had not persisted in prior round): - src/data/posts.js: added category field, allCategories() export, and category-weighted scoring in getRelatedPosts. Earlier round-3 fixes still in place: persistent "Work with me" CTA in header (Contact moved to mobile-only nav link), Home hero CTAs are "Work with me" / "Read the writing" / "Download CV", TL;DR Sections on About/Projects/Experience/Contact/Blog, blog category-filter UI plus tag-filter UI, category eyebrow on post cards, author byline pill with avatar linking to /about. Build: npm run build emits 16 artifacts cleanly. Theme bootstrap script inlined in <head> before CSS in both index.html and route shells (no FOUC). e2e Playwright pass and architect re-evaluation: PASS, ready for hand-off.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Created a single-page portfolio site for GitHub Pages deployment.
Implementation
Visual Design
#2c3e50to bright blue#3498db)fadeInUpfor progressive revealScreenshots
Desktop - Hero & Navigation

Desktop - Skills Section

Desktop - Projects

Mobile View (375px)

Ready for GitHub Pages automatic deployment on merge.
Original prompt
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.