A modern, responsive portfolio website built as a frontend-only static web application using React, TypeScript, and Tailwind CSS. The site showcases professional skills, projects, books, and personal interests with a clean, interactive design.
- π¨ Modern Design: Clean, professional interface with dark mode support
- π± Fully Responsive: Optimized for all screen sizes and devices
- β‘ Fast Performance: Static site generation with optimized assets
- π Interactive Animations: Smooth transitions using Framer Motion
- π Dynamic Content: Projects showcase, reading list, and photo galleries
- π§ Contact Form: Functional contact form with localStorage persistence
- π Dark Mode: System-aware theme switching
- βΏ Accessible: Built with semantic HTML and ARIA standards
The portfolio is deployed on Azure Static Web Apps and automatically updates via GitHub Actions.
- React 18 - Modern React with hooks and functional components
- TypeScript - Type-safe development with enhanced tooling
- Vite - Fast build tool and development server
- Tailwind CSS - Utility-first CSS framework
- shadcn/ui - High-quality, accessible UI components
- Radix UI - Unstyled, accessible component primitives
- Framer Motion - Smooth animations and transitions
- Wouter - Lightweight client-side routing
- React Hook Form - Performant forms with easy validation
- Zod - TypeScript-first schema validation
- PostCSS - CSS processing with Autoprefixer
- Class Variance Authority - Utility for creating component variants
- Lucide React - Beautiful, customizable icons
βββ client/ # React application source
β βββ src/
β β βββ components/ # React components organized by feature
β β β βββ about/ # About section (Timeline, TechStack)
β β β βββ books/ # Book collection and reading list
β β β βββ contact/ # Contact form and information
β β β βββ home/ # Hero section and landing page
β β β βββ interests/ # Photo galleries (motorcycle, cycling)
β β β βββ layout/ # Header, Footer, navigation
β β β βββ projects/ # Project showcase
β β β βββ ui/ # Reusable UI components (shadcn/ui)
β β βββ context/ # React context (theme management)
β β βββ data/ # Static data and mock services
β β βββ hooks/ # Custom React hooks
β β βββ lib/ # Utilities and configurations
β β βββ pages/ # Page components
β βββ index.html # HTML template
βββ shared/ # Shared TypeScript types
βββ assets/ # Static assets (images, documents)
βββ .github/workflows/ # GitHub Actions for deployment
βββ build/ # Production build output (generated)
- Node.js 18+
- npm or yarn
-
Clone the repository
git clone https://github.com/KonuTech/konrad-borowiec.git cd konrad-borowiec -
Install dependencies
npm install
-
Start development server
npm run dev
-
Open in browser
http://localhost:5173
| Command | Description |
|---|---|
npm run dev |
Start development server with hot reload |
npm run build |
Build for production to build/ directory |
npm run preview |
Preview production build locally |
npm run check |
Run TypeScript type checking |
npm run analyze |
Build and analyze bundle size |
This portfolio is built as a pure frontend application with no backend dependencies. All data is managed through static data services that simulate API responses.
client/src/data/data.ts- Central data source for projects, books, and imagesclient/src/lib/staticApi.ts- API compatibility layer for seamless data access- localStorage - Contact form submissions persistence
Components are organized by feature and follow React best practices:
- Functional components with hooks
- TypeScript for type safety
- Props interfaces for clear contracts
- Consistent styling with Tailwind CSS
- React Context - Theme state (dark/light mode)
- useState/useEffect - Local component state
- React Hook Form - Form state management
- localStorage - Client-side data persistence
Custom theme configuration via theme.json with consistent color palette:
- Primary:
#4A90E2(Professional blue) - Gradient: Primary β Light β Accent variations
- Typography: Nunito and Lato font families
Mobile-first approach with Tailwind breakpoints:
sm: 640px and upmd: 768px and uplg: 1024px and upxl: 1280px and up
System-aware dark mode with smooth transitions and optimized contrast ratios.
Automatically deployed via GitHub Actions workflow:
- Build Command:
npm run build - Output Directory:
build/ - Workflow:
.github/workflows/azure-static-web-apps-*.yml
The static build works with any hosting platform:
- Netlify: Drop
build/folder or connect GitHub - Vercel: Import GitHub repository
- GitHub Pages: Upload
build/contents - AWS S3: Static website hosting
Projects: Update projects array in client/src/data/data.ts
{
id: 5,
title: "New Project",
description: "Project description",
imageUrl: "/pictures/projects/new-project.png",
technologies: ["React", "TypeScript"],
featured: true
}Books: Update books array in client/src/data/data.ts with reading status
{
id: 10,
title: "New Book",
author: "Author Name",
coverUrl: "/pictures/readings/book-cover.jpg",
status: "read" | "to-read"
}Images: Add files to assets/pictures/ and update image arrays
Theme Colors: Modify theme.json and tailwind.config.ts
Components: Follow existing patterns in client/src/components/
Styling: Use Tailwind utility classes and custom CSS variables
Test the production build locally with Docker:
# Build the application
npm run build
# Serve with nginx
docker run --rm -d -p 8080:80 \
-v $(pwd)/build:/usr/share/nginx/html \
--name portfolio-test nginx:alpine
# View at http://localhost:8080- Tree Shaking: Unused code elimination
- Code Splitting: Lazy loading with Vite
- Asset Optimization: Compressed images and fonts
- CSS Purging: Unused styles removed in production
npm run analyzeCurrent bundle sizes (gzipped):
- JavaScript: ~114 KB
- CSS: ~13 KB
- Total First Load: ~127 KB
This project was migrated from a full-stack Express.js application to a frontend-only static web app:
- β Simplified Deployment: No server management required
- β Better Performance: CDN-optimized static assets
- β Cost Effective: Free hosting on static platforms
- β Improved Security: No server-side attack vectors
- β Easy Scaling: Automatic CDN distribution
- Component interfaces preserved
- Async data patterns maintained
- Type definitions unchanged
- Development workflow consistent
Β© 2024 Konrad Borowiec. All rights reserved.
This project is not open source. The code and design are made public for showcase purposes only. No part of this project may be used, reproduced, or distributed without express written consent from the author.
Public Showcase: This repository demonstrates modern web development practices and serves as an example of clean, maintainable React TypeScript architecture.
Built with β€οΈ using React, TypeScript, and modern web technologies.