My personal portfolio for selected full-stack work, experience, engineering approach, résumé downloads, and contact details.
The visual system continues the dark circuit-cross identity used on my GitHub profile. The site is intentionally lightweight: React and TypeScript for structure and behavior, CSS for the responsive layout and motion, and no runtime API dependency.
- Responsive layouts for mobile, tablet, laptop, and wide desktop screens
- Persistent light and dark themes with system-preference support
- Selected project cards with verified source and live-demo links
- Optional, feature-gated WakaTime coding hours and Spotify current/recent track cards
- A TaskDuty architecture panel that does not imply the app is deployed
- Accessible mobile navigation, skip link, focus states, semantic landmarks, and reduced-motion support
- Visible-by-default scroll content with animation as progressive enhancement
- Designed and ATS résumé downloads
- Self-hosted Manrope and Geist Mono fonts
- SEO metadata and Person structured data
- Netlify production security headers
Requirements: Node.js 22.x and npm 10 or newer.
npm install
npm run devOpen the local URL printed by Vite.
npm run checkThis runs the component/data tests, Oxlint, TypeScript production build, Vite build, and dependency audit.
npm run build
npm run previewThe deployable output is written to dist/.
Use the live project admin, or open the repository's Add portfolio project issue form directly. Both routes create a GitHub-verified submission, run owner-only validation, and post a preview. Comment /publish on an approved issue to run the full checks and add it to the catalogue.
The local command remains available for maintenance:
npm run project:add -- --repo https://github.com/OWNER/REPOSITORYThe intake process infers safe public metadata but leaves personal contribution and ordering for review. Local drafts can be validated and published with:
npm run project:validate
npm run project:publish -- PROJECT-SLUG --confirm
npm run checkSee docs/PROJECTS.md for the self-service flow, schema, optional fields, screenshot handling, safeguards, and release workflow.
WakaTime uses a safe public JSON share; Spotify uses server-only Netlify environment variables. See docs/INTEGRATIONS.md for the exact setup and authorization steps. Never commit .env.local or expose Spotify credentials through VITE_ variables.
Project screenshots in public/projects/ are captures of my published work. My portrait, résumé files, and the BishopDGreat circuit-cross artwork are personal identity assets. See ASSET-LICENSE.md for their terms.
The source code is available under the MIT License. Brand, résumé, and personal assets are excluded from that grant as described in ASSET-LICENSE.md.