A modern, accessible portfolio website built with Next.js, featuring a professional project showcase, responsive design, and optimized user experience.
- Features
- Accessibility
- Technologies Used
- Getting Started
- Testing
- Deployment
- Project Structure
- Contributing
- AI Agent Configuration
- License
- Professional project portfolio with detailed descriptions and technology stacks
- Responsive and mobile-friendly layout
- Accessible navigation and semantic markup
- Contact options (Email, GitHub)
- Collapsible project list for improved UX
- Keyboard navigable and screen reader optimized
- ARIA labels and roles for all major components
- Skip to content and accessible navigation
- Color contrast and focus indicators
To run this project locally:
-
Clone the repository
git clone https://github.com/kohld/kohld.github.io.git cd kohld.github.io -
Install dependencies
bun install
-
Start the development server
bun run dev
-
Open your browser and visit http://localhost:3000
This project uses Prettier for code formatting. To format all files:
bun run formatNote: Prettier is configured to run manually. Remember to format your code before committing changes to maintain consistent code style across the project.
This project uses Jest and React Testing Library for component testing.
To run all tests:
bun run testTo run tests in watch mode during development:
bun run test:watchAll components are covered with tests to ensure functionality and accessibility:
- Component Tests (
tests/components/)about.test.tsx- About section rendering and skills displaycontact.test.tsx- Contact links and accessibilityfade-in.test.tsx- Animation wrapper componentfooter.test.tsx- Footer content and semantic structureheader.test.tsx- Navigation and mobile menu functionalityhero.test.tsx- Hero section and scroll interactionsprojects.test.tsx- Project filtering and display logicsection-divider.test.tsx- Visual divider component
Current Status: 27 tests across 8 test suites, all passing ✅
- Tests use semantic queries (
getByRole,getByText) for better accessibility validation - Interactive elements are tested with user events (
fireEvent) - ARIA attributes and roles are verified
- Components are tested in isolation with appropriate mocks
This project is automatically deployed to GitHub Pages whenever a commit is pushed to the main branch.
The deployment process is handled by a GitHub Actions workflow defined in .github/workflows/deploy.yml. The workflow performs the following steps:
- Environment: It sets up the Bun runtime.
- Build: It builds the Next.js application into a static site.
- Export: It exports the static files to the
outdirectory. - Deploy: It deploys the contents of the
outdirectory to thegh-pagesbranch, which is then served as the live site.
graph TD
A[kohld.github.io] --> B[app/]
A --> C[public/]
A --> D[Configuration Files]
B --> E[layout.tsx]
B --> F[page.tsx]
B --> G[globals.css]
B --> H[components/]
H --> I[header.tsx]
H --> J[hero.tsx]
H --> K[about.tsx]
H --> L[projects.tsx]
H --> M[contact.tsx]
H --> N[footer.tsx]
C --> O[favicon.svg]
C --> P[Static Assets]
D --> Q[next.config.ts]
D --> R[tailwind.config.ts]
D --> S[tsconfig.json]
D --> T[package.json]
F -.imports.-> I
F -.imports.-> J
F -.imports.-> K
F -.imports.-> L
F -.imports.-> M
F -.imports.-> N
E -.defines.-> U[Metadata & Layout]
F -.renders.-> V[Main Page]
style A fill:#007AFF,stroke:#0051D5,color:#fff
style B fill:#1E1E1E,stroke:#007AFF,color:#fff
style H fill:#1E1E1E,stroke:#007AFF,color:#fff
style F fill:#2D2D2D,stroke:#007AFF,color:#fff
Accessible Project Structure Description
The project is structured as follows:
- The
app/directory forms the core of the Next.js application, containing:layout.tsx: The main layout component.page.tsx: The main page content, which imports all other components.globals.css: Global stylesheets.components/: A sub-directory with all the reusable React components likeheader.tsx,footer.tsx,projects.tsx, etc.
- The
public/directory holds all static assets like images and icons. - The root directory contains configuration files like
next.config.ts,tailwind.config.ts, andpackage.json.
Contributions, issues, and feature requests are welcome. While this is a personal project, I'm open to feedback and suggestions for improvement.
Feel free to check the issues page. If you'd like to contribute, you can fork the repository and create a pull request, or open an issue with the tag "enhancement".
This project includes AI agent configuration files to ensure consistent behavior across different AI models and assistants:
- AGENTS.md - General agent configuration for portfolio development
- CLAUDE.md - Claude-specific agent configuration
- GEMINI.md - Gemini-specific agent configuration
The project follows the Karpathy Guidelines for AI-assisted development:
.agents/skills/karpathy-guidelines/SKILL.md
- Meta-principles for avoiding common LLM coding mistakes
- Think before coding, simplicity first, surgical changes, goal-driven execution
- Think Before Coding: State assumptions explicitly, present multiple interpretations, push back when warranted
- Simplicity First: Minimum code that solves the problem, no speculative features
- Surgical Changes: Touch only what you must, clean up only your own mess
- Goal-Driven Execution: Define success criteria, loop until verified
AI agents are integrated as development assistants that support human contributors:
- Code Generation - AI agents generate code based on project guidelines
- Code Review - AI agents review code for consistency and best practices
- Documentation - AI agents help maintain and update documentation
- Testing - AI agents assist in writing and maintaining tests
For more information about Bun APIs, read the documentation in node_modules/bun-types/docs/**.md.
This project is licensed under the MIT License. See the LICENSE file for details.