A modern, responsive personal portfolio website built with React, TypeScript, Tailwind CSS, and Framer Motion.
- Modern React Architecture: Component-based design with TypeScript for type safety
- Tailwind CSS: Utility-first styling with custom dark theme
- Framer Motion Animations: Smooth, performant animations throughout
- Dynamic Typing Animation: Hero section with rotating phrases
- Blog System: Markdown-based articles with tag filtering and modal reading
- GitHub Integration: Automatically fetches and displays GitHub repositories
- Responsive Design: Mobile-first layout with adaptive grid system
- Docker Development: Containerized development and production environments
- Frontend: React 18+, TypeScript, Vite
- Styling: Tailwind CSS with custom theme
- Animations: Framer Motion
- Markdown: react-markdown with GitHub Flavored Markdown
- Icons: react-icons (Feather Icons)
- Build: Vite, PostCSS
- Server: Nginx (production)
- Container: Docker with multi-stage builds
├── react-app/ # React application
│ ├── src/
│ │ ├── components/ # React components
│ │ │ ├── Hero.tsx # Typing animation hero section
│ │ │ ├── About.tsx # About me section
│ │ │ ├── Articles.tsx # Blog posts with filtering
│ │ │ ├── Projects.tsx # GitHub repositories
│ │ │ ├── Contact.tsx # Contact information
│ │ │ ├── Footer.tsx # Footer with social links
│ │ │ └── ArticleModal.tsx # Full article reader
│ │ ├── hooks/ # Custom React hooks
│ │ │ └── useConfig.ts # Data fetching hooks
│ │ ├── types/ # TypeScript type definitions
│ │ ├── App.tsx # Main application component
│ │ ├── main.tsx # Entry point
│ │ └── index.css # Global styles & Tailwind
│ ├── public/
│ │ ├── config/ # Configuration files
│ │ │ ├── config.json # Personal info & tags
│ │ │ └── articles.json # Blog post metadata
│ │ ├── blog-posts/ # Markdown blog posts
│ │ └── images/ # Static images
│ ├── package.json
│ ├── tailwind.config.js
│ └── vite.config.ts
├── Dockerfile # Multi-stage Docker build
├── docker-compose.yaml # Development environment
├── nginx.conf # Production server config
└── README.md
- Node.js 18+ (for local development)
- Docker and Docker Compose (for containerized development)
-
Clone and install:
git clone https://github.com/ds-brandao/personalWebsite.git cd personalWebsite/react-app npm install -
Start development server:
npm run dev
-
Access the website: http://localhost:5173
-
Start with Docker Compose:
docker compose up dev
-
Access the website: http://localhost:5173
cd react-app
npm run buildOr with Docker:
docker build -t personal-website .
docker run -p 80:80 personal-websiteUpdate react-app/public/config/config.json:
{
"personal": {
"name": "Your Name",
"college": { "name": "University", "url": "https://..." },
"favoriteRestaurant": { "name": "Restaurant", "url": "https://..." }
},
"social": {
"github": { "username": "your-username", "url": "https://github.com/..." },
"email": "[email protected]",
"linkedin": "https://linkedin.com/in/..."
},
"tags": { ... }
}-
Create Markdown file in
react-app/public/blog-posts/:# Article Title Your content here... -
Add metadata to
react-app/public/config/articles.json:{ "title": "Article Title", "summary": "Brief description", "markdown": "/blog-posts/article.md", "image": "/images/blog/article.jpg", "objectPosition": "center 50%", "tags": ["Tag1", "Tag2"] }
| Tag | Color | Description |
|---|---|---|
| Security | Rose | Cybersecurity topics |
| Coding | Emerald | Programming |
| AI | Cyan | Artificial intelligence |
| Tutorial | Amber | How-to guides |
| Project | Purple | Projects |
| CI/CD | Blue | DevOps |
| Home Lab | Orange | Home lab |
| Systems Integration | Indigo | Integration |
| Life | Pink | Personal |
Edit react-app/src/components/Hero.tsx:
const phrases = [
"I'm Your Name",
"I build amazing things",
"I solve problems",
];The website uses Tailwind CSS with custom colors defined in tailwind.config.js:
colors: {
'bg': '#0a0a0a',
'surface-1': '#141414',
'accent': '#6366f1',
// ...
}- Connect your repository
- Set build command:
cd react-app && npm install && npm run build - Set publish directory:
react-app/dist
docker build -t personal-website .
docker run -d -p 80:80 personal-websiteThe included workflow automatically builds and deploys on push to main.
Open source for personal and educational use.