A Jekyll-based personal blog website built with modern web technologies, featuring automated builds, responsive design, and optimized performance.
- Prerequisites
- Installation
- Development
- Project Structure
- Technologies
- Features
- Deployment
- Contributing
- Automated Workflows
- Maintenance
- Troubleshooting
- License
- Node.js v18+ (LTS recommended)
- npm v8+ or yarn v1.22+
- Ruby v2.7+ (for Jekyll)
- Bundler v2.0+ (Ruby gem manager)
- Git v2.0+
# Check Node.js version (should be 18+)
node --version
# Check npm version
npm --version
# Check Ruby version (should be 2.7+)
ruby --version
# Check if Bundler is installed
bundle --versionThis project includes a .nvmrc file for consistent Node.js versioning:
# Install and use the specified Node version
nvm install
nvm usegit clone https://github.com/CanerKaraca23/CanerKaraca23.github.io.git
cd CanerKaraca23.github.ionpm install# Install Bundler if not already installed
gem install bundler
# Install Jekyll and other Ruby gems
bundle install# Test the build process
npm run build
# Start development server
npm run dev| Script | Description |
|---|---|
npm run dev |
Start development server with live reload |
npm run build |
Build project for production |
npm run serve |
Serve built site locally |
npm start |
Alias for npm run dev |
# Start development with live reload
npm run devThis will:
- Build CSS, JS, and copy static files
- Start Jekyll build process (if available)
- Launch BrowserSync server at
http://localhost:3000 - Watch for file changes and auto-reload browser
- Local URL:
http://localhost:3000 - BrowserSync UI:
http://localhost:3001 - Auto-reload: Enabled for CSS, JS, HTML, and Markdown files
- Cross-device testing: Access via your local IP for mobile testing
The development server watches these file types:
assets/css/**/*.css- Stylesheetsassets/js/**/*.js- JavaScript filesassets/img/**/*- Images*.html,_layouts/*.html,_includes/*.html- HTML templates_pages/*.html,_posts/*- Content files*.json,*.xml- Configuration files
Create new posts in the _posts/ directory:
# File naming convention: YYYY-MM-DD-title.md
touch _posts/2024-01-15-my-new-post.mdAdd static pages to the _pages/ directory:
touch _pages/about.mdβββ .github/ # GitHub Actions and workflows
β βββ dependabot.yml # Dependency update automation
βββ _includes/ # Reusable Jekyll components
β βββ head.html # HTML head section
β βββ javascripts.html # JavaScript includes
β βββ analytics.html # Analytics tracking
βββ _layouts/ # Jekyll page templates
β βββ default.html # Main layout template
βββ _pages/ # Static pages (About, Contact, etc.)
βββ _posts/ # Blog posts (Markdown files)
βββ _data/ # Jekyll data files (YAML, JSON)
βββ assets/ # Static assets
β βββ css/ # Stylesheets and themes
β βββ js/ # JavaScript files
β βββ img/ # Images and media
βββ _site/ # Generated site (auto-generated)
βββ gulpfile.js # Gulp build configuration
βββ package.json # Node.js dependencies and scripts
βββ _config.yml # Jekyll configuration
βββ .nvmrc # Node.js version specification
βββ Gemfile # Ruby dependencies
βββ LICENSE # Project license
_includes/: Reusable HTML components included in layouts_layouts/: HTML templates that wrap your content_pages/: Static pages that don't follow the blog post format_posts/: Blog posts written in Markdown with YAML front matterassets/: Static files (CSS, JavaScript, images) served directly_site/: Generated static site (excluded from version control).github/: GitHub-specific configuration and workflows
- Jekyll - Static site generator with Ruby
- Gulp 4 - Build automation and task runner
- BrowserSync - Live reload development server
- Node.js - JavaScript runtime for build tools
- SCSS/CSS - Styling with Sass preprocessing
- JavaScript/jQuery - Interactive features and DOM manipulation
- HTML5 - Semantic markup
- Responsive Design - Mobile-first approach
- npm - Node.js package management
- Bundler - Ruby gem dependency management
- Git - Version control
- GitHub Pages - Hosting and deployment
- Asset Compilation - CSS and JavaScript processing
- Image Optimization - Automated image compression
- Live Reload - Instant browser refresh during development
- File Watching - Automatic rebuilds on file changes
- Responsive Design - Mobile-first, works on all devices
- Search Functionality - Fast client-side search
- Infinite Scroll - Seamless content loading
- Tag-based Filtering - Organize and filter content by tags
- Night Mode - Automatic dark/light theme switching
- SEO Optimization - Meta tags, structured data, sitemaps
- Security Headers - Enhanced security configuration
- Performance Optimizations - Minified assets, lazy loading
- Fast Loading - Optimized build pipeline
- Caching Strategy - Browser and CDN caching
- Live Reload - Instant preview of changes
- Hot Module Replacement - Fast development workflow
- Source Maps - Easy debugging
- Linting - Code quality enforcement
- Automated Builds - CI/CD pipeline integration
This site is automatically deployed to GitHub Pages when changes are pushed to the main branch.
Live URL: https://canerkaraca23.github.io/
-
Build the site:
npm run build
-
Verify the build:
npm run serve # Visit http://localhost:3000 to test -
Deploy to GitHub Pages:
git add . git commit -m "Deploy site updates" git push origin main
To test the production build locally:
# Build for production
npm run build
# Serve the built site
npm run serve- All tests pass locally
- Build completes without errors
- Site renders correctly in production mode
- All links work correctly
- Images load properly
- Search functionality works
- Mobile responsiveness verified
We welcome contributions to improve this blog! Here's how you can help:
- Fork the repository
- Clone your fork:
git clone https://github.com/YOUR_USERNAME/CanerKaraca23.github.io.git
- Create a feature branch:
git checkout -b feature/your-feature-name
- Use 2 spaces for indentation
- Follow existing naming conventions
- Write descriptive commit messages
- Add comments for complex logic
- Test your changes locally
- Run the build process successfully
- Verify responsive design
- Check for console errors
- Update documentation if needed
type: brief description
More detailed explanation if needed
Fixes #issue-number
Types: feat, fix, docs, style, refactor, test, chore
- Update documentation if you're changing functionality
- Test thoroughly on different devices and browsers
- Create a descriptive PR title and description
- Reference any related issues
- Be responsive to feedback during code review
- Follow the naming convention:
YYYY-MM-DD-title.md - Include proper YAML front matter
- Use appropriate tags and categories
- Optimize images before adding them
Use the issue template and include:
- Browser and version
- Steps to reproduce
- Expected vs actual behavior
- Screenshots if applicable
- Describe the feature clearly
- Explain the use case
- Consider implementation complexity
- Discuss potential alternatives
Dependabot is configured to automatically check for dependency updates across multiple package ecosystems:
- NPM packages - Daily checks for Node.js dependencies
- Ruby gems - Daily checks for Jekyll and Ruby dependencies
- GitHub Actions - Daily checks for workflow updates
- Docker images - Daily checks for container updates
Located in .github/dependabot.yml, monitoring:
npm(Node.js packages)bundler(Ruby gems)github-actions(Workflow dependencies)docker,gradle,maven,pip, and other ecosystems
- Review the changes in the automated PR
- Test locally if significant updates
- Merge if tests pass and no breaking changes
- Close if the update isn't needed
- Automatic deployment on push to
mainbranch - Build process uses Jekyll's built-in GitHub Pages integration
- Custom domain configured via
_config.yml - HTTPS enabled by default
- Build status visible in GitHub repository
- Deployment logs available in GitHub Pages settings
- Analytics integrated via Google Analytics
- Review and merge Dependabot PRs
- Check site performance and loading times
- Verify all links are working
- Review analytics data
- Update Node.js version if needed (check
.nvmrc) - Review and update content
- Check for broken images or assets
- Update documentation
- Review and update dependencies manually
- Performance audit and optimization
- Security review
- Backup content and configuration
# Check for outdated packages
npm outdated
# Update all packages to latest versions
npm update
# Update specific package
npm install package-name@latest# Update all gems
bundle update
# Update specific gem
bundle update gem-name
# Check for security vulnerabilities
bundle audit# Time the build process
time npm run build
# Analyze bundle size
npm run build && du -sh _site/- Use Google PageSpeed Insights
- Monitor Core Web Vitals
- Check mobile performance regularly
- Review network requests in dev tools
# Backup posts and pages
cp -r _posts/ backup/posts-$(date +%Y%m%d)
cp -r _pages/ backup/pages-$(date +%Y%m%d)# Backup configuration files
cp _config.yml backup/config-$(date +%Y%m%d).yml
cp package.json backup/package-$(date +%Y%m%d).jsonIssue: Jekyll not found error
# Solution: Install Jekyll
gem install jekyll bundler
bundle installIssue: npm run build fails
# Check Node.js version
node --version
# Reinstall dependencies
rm -rf node_modules package-lock.json
npm installIssue: Browser not reloading automatically
# Restart development server
npm run devIssue: Port 3000 already in use
# Kill process using port 3000
lsof -ti:3000 | xargs kill
npm run devIssue: Ruby version conflicts
# Check Ruby version
ruby --version
# Install correct Ruby version with rbenv
rbenv install 2.7.0
rbenv local 2.7.0Issue: Missing gems
# Install missing dependencies
bundle install- Check for large image files in
assets/img/ - Remove unused dependencies from
package.json - Clear Jekyll cache:
bundle exec jekyll clean
- Optimize images before adding them
- Remove unused CSS and JavaScript
- Use gulp tasks for asset optimization
- Check the logs for specific error messages
- Search existing issues on GitHub
- Create a new issue with:
- Error message
- Steps to reproduce
- System information
- Browser details
Enable verbose logging:
# Verbose npm output
npm run build --verbose
# Jekyll debug mode
bundle exec jekyll build --verboseThis project is licensed under the Creative Commons CC0 1.0 Universal License - see the LICENSE file for details.
- β Commercial use - Use for commercial purposes
- β Modification - Adapt and build upon the material
- β Distribution - Copy and redistribute in any format
- β Private use - Use for personal projects
- β No warranty - No warranty or liability provided
- β No attribution required - Though attribution is appreciated
Made with β€οΈ by Caner Karaca
For questions or support, please open an issue or contact canerkaraca_23@hotmail.com.