Skip to content

Pepryan/astro-portfolio

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

80 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸš€ Febryan Portfolio - Modern Astro Portfolio 2025

Astro React TypeScript TailwindCSS Lighthouse

A cutting-edge, high-performance personal portfolio and blog built with Astro 5.9, React 18, TailwindCSS 3.4, and MDX. This project represents a complete architectural migration from Next.js to Astro, delivering superior performance while maintaining all functionality and visual fidelity with 2025 web design standards.

🌐 Live Demo: https://febryan.web.id πŸ“Š Performance: Optimized for speed and user experience ⚑ Build Time: < 30 seconds πŸ“¦ Bundle Size: < 500KB (gzipped) 🎨 Design: 2025 Modern Web Standards with Motion Design πŸ”§ Architecture: Static Site Generation with Islands Architecture ☁️ Hosting: Cloudflare Pages with global CDN

Portfolio Preview

🎯 Project Overview

This portfolio showcases modern web development practices with a focus on:

  • Performance-First Architecture: Static site generation with selective hydration using Astro's Islands Architecture
  • 2025 Design Standards: Modern UI/UX with micro-interactions, motion design, and storytelling elements
  • Developer Experience: TypeScript, hot reload, component-driven development with excellent DX
  • Content Management: MDX-powered blog with advanced features, syntax highlighting, and rich content
  • Accessibility: WCAG 2.1 AA compliant with semantic HTML and proper ARIA attributes
  • SEO Optimization: Structured data, dynamic meta tags, Open Graph, and automatic sitemap generation
  • Progressive Enhancement: Works without JavaScript, enhanced with React components where needed

✨ Features

🎨 Design & UX

  • πŸŒ— Advanced dark/light mode with smooth transitions and persistent theme storage
  • πŸ“± Fully responsive design optimized for all devices with mobile-first approach
  • πŸ’… Styled with TailwindCSS 3.4 and custom components following 2025 design trends
  • πŸš€ Lightning-fast page loads with Astro's static site generation and Islands Architecture
  • ✨ Smooth micro-interactions and motion design with Framer Motion
  • 🎯 Intelligent floating navigation with active section detection and smooth scrolling
  • 🎭 Storytelling elements with emotional connections through motion design
  • 🎨 Modern UI components with proper visual hierarchy and spacing
  • πŸ”„ Configurable sections that can be enabled/disabled per user preferences

πŸ“ Advanced Blog System

  • πŸ“ MDX blog support with rich content and React component integration
  • 🎨 Advanced syntax highlighting for code blocks with Shiki and custom themes
  • πŸ“‹ Copy code buttons with improved UX and mobile touch support
  • πŸ” Powerful blog search functionality with real-time filtering
  • 🏷️ Tag-based blog filtering with dedicated tag pages
  • πŸ“– Accurate reading time estimation with code block consideration
  • πŸ“Š Blog statistics and metadata with configurable display
  • πŸ”— Social sharing buttons with Open Graph optimization
  • πŸ“‘ Table of Contents (TOC) with auto-scroll and active section highlighting
  • πŸ—‚οΈ Archive page with chronological organization
  • πŸ“„ Pagination with SEO-friendly URLs

πŸ› οΈ Technical Excellence

  • ⚑ Built with Astro 5.9 for optimal performance and modern architecture
  • πŸ”§ Full TypeScript support for type safety and better developer experience
  • πŸ“¦ Component-based architecture with reusable React components
  • 🎯 Advanced SEO optimization with structured data, JSON-LD, and dynamic meta tags
  • πŸ—ΊοΈ Automatic sitemap generation with proper priority and change frequency
  • πŸ“± Progressive Web App (PWA) ready with service worker and manifest
  • πŸ”’ Security headers configured for production deployment
  • πŸš€ Optimized build process with code splitting and asset optimization
  • πŸ“ˆ Performance monitoring with Core Web Vitals optimization
  • πŸ”„ Hot module replacement for instant development feedback

πŸš€ Quick Start

Prerequisites

  • Node.js: 18.0.0 or higher (LTS recommended)
  • Package Manager: npm (included with Node.js), yarn, or pnpm
  • Git: For version control and cloning the repository

Installation

# Clone the repository
git clone https://github.com/Pepryan/astro-portfolio.git
cd astro-portfolio

# Install dependencies
npm install
# or with yarn
yarn install
# or with pnpm
pnpm install

# Start development server
npm run dev
# Server will start at http://localhost:4321

# Build for production
npm run build

# Preview production build locally
npm run preview

# Deploy to GitHub Pages (if configured)
npm run deploy

Development Commands

# Development server with hot reload
npm run dev

# Build for production
npm run build

# Preview production build
npm run preview

# Type checking
npx astro check

# Format code
npx prettier --write .

# Lint code
npx eslint . --fix

πŸ“ Project Structure

astro-portfolio/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ components/              # React components
β”‚   β”‚   β”œβ”€β”€ About.tsx           # About section component
β”‚   β”‚   β”œβ”€β”€ BlogCard.tsx        # Blog post card component
β”‚   β”‚   β”œβ”€β”€ BlogPostLayout.tsx  # Blog post layout wrapper
β”‚   β”‚   β”œβ”€β”€ CareerSection.tsx   # Experience and education
β”‚   β”‚   β”œβ”€β”€ Contact.tsx         # Contact section
β”‚   β”‚   β”œβ”€β”€ CopyCodeScript.astro # Code copy functionality
β”‚   β”‚   β”œβ”€β”€ CustomHead.astro    # SEO and meta tags
β”‚   β”‚   β”œβ”€β”€ Footer.tsx          # Site footer
β”‚   β”‚   β”œβ”€β”€ Header.tsx          # Navigation header
β”‚   β”‚   β”œβ”€β”€ Hero.tsx            # Hero section
β”‚   β”‚   β”œβ”€β”€ LayoutWrapper.tsx   # Main layout wrapper
β”‚   β”‚   β”œβ”€β”€ PortfolioSection.tsx # Projects showcase
β”‚   β”‚   β”œβ”€β”€ SearchModal.tsx     # Blog search functionality
β”‚   β”‚   β”œβ”€β”€ TableOfContents.tsx # TOC for blog posts
β”‚   β”‚   β”œβ”€β”€ ThemeProvider.tsx   # Dark/light theme management
β”‚   β”‚   └── ThemeToggle.tsx     # Theme switch component
β”‚   β”œβ”€β”€ content/                # Content collections
β”‚   β”‚   β”œβ”€β”€ config.ts           # Content schema definitions
β”‚   β”‚   └── posts/              # Blog posts (.mdx files)
β”‚   β”‚       β”œβ”€β”€ cloud-native-architecture-guide.mdx
β”‚   β”‚       β”œβ”€β”€ modern-web-development-2025.mdx
β”‚   β”‚       └── react-performance-optimization.mdx
β”‚   β”œβ”€β”€ layouts/                # Astro layouts
β”‚   β”‚   └── Layout.astro        # Base layout with SEO
β”‚   β”œβ”€β”€ pages/                  # File-based routing
β”‚   β”‚   β”œβ”€β”€ index.astro         # Homepage
β”‚   β”‚   β”œβ”€β”€ 404.astro           # Custom 404 page
β”‚   β”‚   β”œβ”€β”€ archive.astro       # Blog archive page
β”‚   β”‚   β”œβ”€β”€ rss.xml.ts          # RSS feed generation
β”‚   β”‚   └── blog/               # Blog routing
β”‚   β”‚       β”œβ”€β”€ index.astro     # Blog listing page
β”‚   β”‚       β”œβ”€β”€ [...slug].astro # Dynamic blog post pages
β”‚   β”‚       └── tags/           # Tag-based filtering
β”‚   β”‚           β”œβ”€β”€ index.astro # All tags page
β”‚   β”‚           └── [tag].astro # Posts by tag
β”‚   β”œβ”€β”€ styles/                 # Global styles
β”‚   β”‚   └── globals.css         # TailwindCSS base styles
β”‚   β”œβ”€β”€ utils/                  # Utility functions
β”‚   β”‚   β”œβ”€β”€ readingTime.ts      # Reading time calculation
β”‚   β”‚   └── seo.ts              # SEO utilities
β”‚   └── config/                 # Configuration files
β”‚       └── components.ts       # Site configuration
β”œβ”€β”€ public/                     # Static assets
β”‚   β”œβ”€β”€ images/                 # Image assets
β”‚   β”‚   β”œβ”€β”€ default-og-image.webp # Default Open Graph image
β”‚   β”‚   β”œβ”€β”€ default-og-image.svg # SVG version
β”‚   β”‚   └── preview.webp         # Portfolio preview
β”‚   β”œβ”€β”€ documents/              # Downloadable files
β”‚   β”œβ”€β”€ favicon.ico             # Site favicon
β”‚   β”œβ”€β”€ robots.txt              # Search engine directives
β”‚   └── site.webmanifest        # PWA manifest
β”œβ”€β”€ netlify.toml               # Legacy deployment config (optional)
β”œβ”€β”€ astro.config.mjs           # Astro configuration
β”œβ”€β”€ tailwind.config.mjs        # TailwindCSS configuration
β”œβ”€β”€ tsconfig.json              # TypeScript configuration
└── package.json               # Dependencies and scripts

🎨 Customization

Site Configuration

The main configuration file src/config/components.ts contains all customizable settings:

SEO Configuration

export const seoConfig = {
  site: {
    name: "Your Portfolio Name",
    title: "Your Title - Your Profession",
    description: "Your description",
    url: "https://yourdomain.com",
    language: "en",
    locale: "en_US"
  },
  author: {
    name: "Your Name",
    email: "your.email@example.com",
    url: "https://yourdomain.com",
    jobTitle: "Your Job Title",
    location: "Your Location"
  }
}

Content Sections

  • Hero Section: Personal introduction and call-to-action
  • About Section: Detailed personal story and background
  • Experience: Work history with responsibilities and technologies
  • Education: Academic background and certifications
  • Skills: Technical skills organized by categories
  • Projects: Portfolio items with links and descriptions
  • Contact: Contact information and social media links

Layout Options

  • Homepage Layout: Choose between traditional or 2025 modern design
  • Section Visibility: Enable/disable sections as needed
  • Navigation: Configure floating navigation and header options
  • Theme: Customize colors, fonts, and spacing

Styling Customization

TailwindCSS Configuration

// tailwind.config.mjs
export default {
  theme: {
    extend: {
      colors: {
        primary: '#3b82f6',
        secondary: '#64748b'
      },
      fontFamily: {
        sans: ['Inter', 'system-ui', 'sans-serif']
      }
    }
  }
}

Global Styles

  • Base Styles: src/styles/globals.css
  • Component Styles: Individual component files using TailwindCSS classes
  • Dark Mode: Automatic dark mode support with dark: prefixes
  • Custom CSS: Add custom styles in the globals.css file

Content Management

Blog Posts

Create new blog posts by adding .mdx files to src/content/posts/:

---
title: "Your Post Title"
date: "2025-01-01"
summary: "Brief description of your post"
tags: ["tag1", "tag2", "tag3"]
category: "Technology"
author: "Your Name"
draft: false
image: "/images/post-image.jpg" # Optional
---

# Your Content Here

Write your blog post content using Markdown and MDX syntax.
You can include React components and interactive elements.

Static Assets

  • Images: Store in public/images/ directory
  • Documents: Store downloadable files in public/documents/
  • Favicons: Replace favicon files in public/ directory
  • Manifest: Update public/site.webmanifest for PWA settings

πŸ“ Advanced Blog Features

Writing Blog Posts

Create new blog posts by adding .mdx files to src/content/posts/:

---
title: "Your Post Title"
date: "2025-01-01"
summary: "Brief description of your post"
tags: ["tag1", "tag2", "tag3"]
category: "Technology"
author: "Your Name"
draft: false
hidden: false
image: "/images/post-cover.jpg"
imageAlt: "Description of the image"
readingTime: 5 # Optional, auto-calculated if not provided
featured: true # Show in featured posts
seo:
  title: "Custom SEO Title"
  description: "Custom meta description"
  keywords: ["keyword1", "keyword2"]
openGraph:
  title: "Custom OG Title"
  description: "Custom OG description"
  type: "article"
twitter:
  card: "summary_large_image"
  title: "Custom Twitter Title"
  description: "Custom Twitter description"
schema:
  type: "BlogPosting"
  author:
    name: "Your Name"
    url: "https://yourdomain.com"
  publisher:
    name: "Your Blog"
    url: "https://yourdomain.com"
---

# Your Content Here

Write your blog post content using **Markdown** and **MDX** syntax.

## Code Blocks with Syntax Highlighting

```javascript
// JavaScript example with syntax highlighting
function greet(name) {
  console.log(`Hello, ${name}!`);
}

greet('World');

Interactive Components

You can include React components directly in your MDX:

Advanced Features

  • βœ… Automatic table of contents generation
  • βœ… Reading time estimation
  • βœ… Code copy buttons
  • βœ… Social sharing
  • βœ… SEO optimization
  • βœ… Related posts suggestions

### Blog Configuration

#### **Content Schema**
The blog uses Astro's content collections with TypeScript schemas for validation:

```typescript
// src/content/config.ts
const postsCollection = defineCollection({
  type: 'content',
  schema: z.object({
    title: z.string(),
    date: z.date(),
    summary: z.string(),
    tags: z.array(z.string()),
    category: z.string(),
    author: z.string(),
    draft: z.boolean().default(false),
    hidden: z.boolean().default(false),
    image: z.string().optional(),
    featured: z.boolean().default(false)
  })
});

Blog Features

  • Search: Real-time search across all posts
  • Filtering: Filter by tags, categories, or date
  • Pagination: Configurable posts per page
  • Archive: Chronological organization by year/month
  • RSS Feed: Automatic RSS feed generation at /rss.xml
  • Sitemap: Automatic sitemap generation for SEO

πŸš€ Deployment

Cloudflare Pages (Current Setup)

Automatic Deployment

  1. Connect Repository: Link your GitHub repository to Cloudflare Pages
  2. Build Settings:
    • Build command: npm run build
    • Build output directory: dist
    • Node.js version: 18 or higher
    • Environment variables: Set NODE_ENV=production
  3. Deploy: Automatic deployment on push to main branch
  4. Custom Domain: Configure your custom domain in Cloudflare Pages settings
  5. Global CDN: Benefit from Cloudflare's worldwide edge network
  6. Performance: Enhanced caching and compression automatically applied
  7. Security: Built-in DDoS protection and SSL certificates

Manual Cloudflare Pages Deployment

# Install Wrangler CLI
npm install -g wrangler

# Build the project
npm run build

# Deploy to Cloudflare Pages
wrangler pages deploy dist

Alternative Deployment Options

Netlify

# Install Netlify CLI
npm install -g netlify-cli

# Build the project
npm run build

# Deploy to Netlify
netlify deploy --prod --dir=dist

Vercel

# Install Vercel CLI
npm install -g vercel

# Deploy to Vercel
vercel --prod

GitHub Pages

# Build and deploy to GitHub Pages
npm run deploy

# This command:
# 1. Builds the project
# 2. Creates .nojekyll file
# 3. Deploys to gh-pages branch

Docker Deployment

# Dockerfile
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

Manual Deployment

# Build the project
npm run build

# Upload the `dist/` folder to your hosting provider
# The dist folder contains all static files ready for deployment

Environment Variables

For production deployment, configure these environment variables:

Cloudflare Pages Settings

  • Build command: npm run build
  • Build output directory: dist
  • Node.js version: 18
  • Environment variables:
    • NODE_ENV: production
    • SITE_URL: https://febryan.web.id

Other Platforms

  • SITE_URL: Your production domain (e.g., https://febryan.web.id)
  • NODE_ENV: Set to "production"
  • BUILD_COMMAND: "npm run build"
  • PUBLISH_DIRECTORY: "dist"

πŸ—ΊοΈ Enhanced Sitemap & SEO

Custom Sitemap Implementation

The portfolio features a comprehensive, custom sitemap implementation that automatically excludes draft posts and includes proper SEO metadata:

Features:

  • Automatic Draft Filtering: Only published posts (non-draft, non-hidden) are included
  • Enhanced Metadata: Includes lastmod, changefreq, and priority for better SEO
  • Comprehensive Coverage: All pages, blog posts, tag pages, and static routes
  • Proper URL Structure: Clean, SEO-friendly URLs with correct encoding
  • Sitemap Index: Organized structure for better search engine crawling

Generated Sitemaps:

  • /sitemap-index.xml - Main sitemap index
  • /sitemap.xml - Complete sitemap with all URLs and metadata

URL Priorities:

  • Homepage: 1.0 (highest priority, weekly updates)
  • Blog listing: 0.9 (high priority, daily updates)
  • Projects: 0.8 (high priority, weekly updates)
  • Archive: 0.7 (medium priority, weekly updates)
  • Blog posts: 0.7 (medium priority, monthly updates)
  • Contact/About: 0.6/0.5 (lower priority, monthly updates)
  • Tag pages: 0.5 (medium priority, weekly updates)

Implementation Files:

  • src/utils/sitemap.ts - Sitemap generation utilities
  • src/pages/sitemap.xml.ts - Main sitemap endpoint
  • src/pages/sitemap-index.xml.ts - Sitemap index endpoint
  • public/robots.txt - Updated with correct sitemap references
  • scripts/validate-sitemap.js - Validation script for sitemap integrity

Validation:

# Validate sitemap after build
npm run validate-sitemap

# Build and validate in one command
npm run build:validate

SEO Benefits:

  • Better Crawling: Search engines can efficiently discover all pages
  • Fresh Content: Automatic lastmod dates help search engines prioritize recent content
  • Priority Signals: Clear priority hierarchy guides search engine focus
  • Clean Structure: No draft/hidden content cluttering search results

πŸ”§ Technical Configuration

Astro Configuration

The astro.config.mjs file includes comprehensive settings:

export default defineConfig({
  site: 'https://febryan.web.id',
  output: 'static',
  integrations: [
    mdx({
      remarkPlugins: [remarkGfm],
      rehypePlugins: [
        [rehypePrettyCode, {
          theme: 'night-owl',
          keepBackground: true,
          defaultLang: 'plaintext',
          grid: true
        }]
      ],
      syntaxHighlight: false
    }),
    react(),
    tailwind({ applyBaseStyles: false })
    // Custom sitemap implementation in src/pages/sitemap.xml.ts
  ]
});

Key Features

  • MDX Support: Rich content with React components
  • Syntax Highlighting: Shiki-powered code highlighting with night-owl theme
  • React Integration: Interactive components where needed
  • TailwindCSS: Utility-first CSS framework
  • Sitemap Generation: Automatic SEO-friendly sitemap
  • Static Generation: Optimal performance with pre-rendered pages

Content Collections

Blog posts use Astro's content collections with TypeScript schemas:

// src/content/config.ts
import { defineCollection, z } from 'astro:content';

const postsCollection = defineCollection({
  type: 'content',
  schema: z.object({
    title: z.string(),
    date: z.date(),
    summary: z.string(),
    tags: z.array(z.string()),
    category: z.string(),
    author: z.string(),
    draft: z.boolean().default(false),
    hidden: z.boolean().default(false),
    image: z.string().optional(),
    imageAlt: z.string().optional(),
    featured: z.boolean().default(false)
  })
});

export const collections = {
  posts: postsCollection
};

TypeScript Configuration

{
  "extends": "astro/tsconfigs/strict",
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@/*": ["./src/*"],
      "@/components/*": ["./src/components/*"],
      "@/utils/*": ["./src/utils/*"],
      "@/config/*": ["./src/config/*"]
    }
  }
}

πŸ“Š Performance & SEO

Performance Metrics

  • ⚑ Lighthouse Scores: Optimized for real-world performance
    • Performance: 85-95/100 (varies by content and network)
    • Accessibility: 95-100/100
    • Best Practices: 90-100/100
    • SEO: 95-100/100
  • πŸš€ Loading Times:
    • First Contentful Paint (FCP): < 1.5s
    • Largest Contentful Paint (LCP): < 3.0s
    • First Input Delay (FID): < 100ms
    • Cumulative Layout Shift (CLS): < 0.1
  • πŸ“¦ Bundle Size: < 500KB (gzipped)
  • ⚑ Build Time: < 30 seconds
  • πŸ”„ Time to Interactive (TTI): < 4s
  • ☁️ CDN Performance: Global edge caching with Cloudflare

SEO Optimization

  • 🎯 Structured Data: JSON-LD schema markup for rich snippets
  • πŸ“± Mobile-First: Responsive design optimized for all devices
  • πŸ” Meta Tags: Dynamic meta tags for each page
  • 🌐 Open Graph: Social media preview optimization
  • 🐦 Twitter Cards: Enhanced Twitter sharing
  • πŸ—ΊοΈ Sitemap: Automatic XML sitemap generation
  • πŸ€– Robots.txt: Search engine crawling directives
  • πŸ“„ Canonical URLs: Proper URL canonicalization
  • πŸ”— Internal Linking: Strategic internal link structure
  • ☁️ CDN SEO: Enhanced by Cloudflare's global network for faster indexing

Core Web Vitals

βœ… LCP: 1.5-2.5s (Good: < 2.5s)
βœ… FID: 50-80ms (Good: < 100ms)
βœ… CLS: 0.05-0.08 (Good: < 0.1)
βœ… TTFB: 200-400ms (Good: < 600ms) - Enhanced by Cloudflare CDN
βœ… FCP: 1.0-1.5s (Good: < 1.8s)

Accessibility Features

  • β™Ώ WCAG 2.1 AA Compliant: Full accessibility compliance
  • ⌨️ Keyboard Navigation: Complete keyboard accessibility
  • πŸ”Š Screen Reader Support: Proper ARIA labels and semantic HTML
  • 🎨 Color Contrast: WCAG AA color contrast ratios
  • πŸ” Focus Management: Visible focus indicators
  • πŸ“± Touch Targets: Minimum 44px touch targets for mobile

πŸ› οΈ Development

Tech Stack

Development Workflow

# 1. Clone and setup
git clone https://github.com/Pepryan/astro-portfolio.git
cd astro-portfolio
npm install

# 2. Start development
npm run dev

# 3. Make changes and test
npm run build
npm run preview

# 4. Deploy
git add .
git commit -m "Your changes"
git push origin main

Code Quality

  • TypeScript: Full type safety with strict mode
  • ESLint: Code linting with Astro and React rules
  • Prettier: Code formatting with consistent style
  • Husky: Git hooks for pre-commit checks
  • Commitlint: Conventional commit messages

🀝 Contributing

We welcome contributions! Here's how to get started:

Getting Started

  1. Fork the repository on GitHub
  2. Clone your fork locally
  3. Create a feature branch (git checkout -b feature/amazing-feature)
  4. Install dependencies (npm install)
  5. Start development server (npm run dev)

Making Changes

  1. Make your changes following the existing code style
  2. Test your changes thoroughly
  3. Build the project (npm run build)
  4. Preview the production build (npm run preview)
  5. Commit your changes with conventional commit format

Submitting Changes

  1. Push to your feature branch (git push origin feature/amazing-feature)
  2. Create a Pull Request with a clear description
  3. Wait for review and address any feedback

Contribution Guidelines

  • Follow the existing code style and conventions
  • Write clear, descriptive commit messages
  • Test your changes on multiple devices and browsers
  • Update documentation if needed
  • Be respectful and constructive in discussions

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

What this means:

  • βœ… Commercial use allowed
  • βœ… Modification allowed
  • βœ… Distribution allowed
  • βœ… Private use allowed
  • ❌ No warranty provided
  • ❌ No liability accepted

πŸ‘¨β€πŸ’» Author

Febryan Ramadhan

About Me

Cloud Engineer & DevOps Specialist based in Bogor, Indonesia. Passionate about building scalable, reliable systems and sharing knowledge through open-source projects and technical writing.

πŸ™ Acknowledgments

Technologies

  • Astro - The web framework for content-driven websites
  • React - A JavaScript library for building user interfaces
  • TailwindCSS - A utility-first CSS framework
  • TypeScript - JavaScript with syntax for types
  • Framer Motion - A production-ready motion library for React
  • MDX - Markdown for the component era
  • Shiki - A beautiful syntax highlighter

Inspiration

  • Modern web design trends and 2025 standards
  • Accessibility-first development practices
  • Performance optimization techniques
  • Developer experience improvements

Infrastructure & Community

  • Cloudflare Pages for reliable hosting and global CDN
  • Astro community for excellent documentation and support
  • Open-source contributors who make projects like this possible
  • Web development community for sharing knowledge and best practices

🌟 Support

If you found this project helpful, please consider:

  • ⭐ Starring the repository on GitHub
  • πŸ› Reporting any bugs or issues
  • πŸ’‘ Suggesting new features or improvements
  • πŸ”„ Sharing the project with others
  • πŸ’– Contributing to the codebase

Made with ❀️ by Febryan Ramadhan

About

Febryan Ramadhan Personal Blog and Portfolio, built with Astro

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors