Tutorial

Membangun Portfolio Website Profesional dengan Astro dan Tailwind CSS: Panduan Step-by-Step

Membangun Portfolio Website Profesional dengan Astro dan Tailwind CSS: Panduan Step-by-Step

Saya sudah mencoba banyak framework untuk portfolio website: WordPress, Hugo, Jekyll, Next.js, dan sekarang Astro. Setelah 3 tahun bolak-balik antar framework, saya akhirnya menemukan kombinasi yang paling cocok untuk developer Indonesia: Astro + Tailwind CSS.

Mengapa? Karena Astro menghasilkan static site yang super cepat (skor Lighthouse 100 di semua metrik), Tailwind bikin styling tanpa bolak-balik ke file CSS terpisah, dan hasilnya bisa deploy ke mana saja termasuk VPS murah. Tidak perlu bayar $20/bulan untuk Vercel Pro atau Netlify Team.

Artikel ini akan memandu kamu step-by-step membangun portfolio website dari nol. Saya akan gunakan contoh nyata — website toolkuy.com yang saya bangun dengan pola yang sama.

1. Mengapa Astro untuk Portfolio?

Astro berbeda dari framework lain karena fokusnya pada content-first. Artinya, untuk website yang mayoritas konten (portfolio, blog, documentation), Astro menghasilkan output yang lebih ringan dan lebih cepat dari React/Next.js.

Perbandingan yang saya lakukan di VPS yang sama (2 vCPU, 2GB RAM):

FrameworkBuild TimeOutput SizeLighthouse ScoreTTI
Astro 5.x1.2s15KB (per page)1000.3s
Next.js 15 (static)8.5s89KB (per page)921.8s
Hugo0.1s12KB (per page)1000.2s

Astro kalah dari Hugo di build time, tapi menang dari segi DX (developer experience) karena kamu bisa pakai component framework yang sudah kamu kenal (React, Vue, Svelte) saat dibutuhkan, sementara di production hanya menghasilkan HTML murni tanpa JavaScript runtime.

2. Setup Project

Mulai dengan create project Astro baru:

npm create astro@latest portfolio -- --template minimal
cd portfolio
npm install
npm run dev

Project minimal Astro hanya punya satu file: src/pages/index.astro. Ini sudah cukup untuk portfolio sederhana.

Install Tailwind CSS:

npx astro add tailwind
npm install @astrojs/tailwind tailwindcss

Setelah install, file tailwind.config.mjs akan otomatis dibuat. Tambahkan custom colors untuk branding:

/** @type {import('tailwindcss').Config} */
export default {
  content: ['./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}'],
  theme: {
    extend: {
      colors: {
        primary: '#2563eb',
        dark: '#0f172a',
      },
      fontFamily: {
        sans: ['Inter', 'sans-serif'],
        mono: ['JetBrains Mono', 'monospace'],
      }
    }
  }
}

3. Struktur File Portfolio

Berikut struktur yang saya gunakan:

src/
  components/
    Header.astro
    Hero.astro
    ProjectCard.astro
    SkillBadge.astro
    Footer.astro
  layouts/
    Layout.astro
  pages/
    index.astro        (homepage)
    projects/
      index.astro      (daftar project)
      [slug].astro     (detail project)
  content/
    projects/
      project-1.md     (content project)
  styles/
    global.css

Ini pola yang saya pakai di toolkuy.com. Content disimpan di Markdown supaya gampang di-update, sementara layout dan styling menggunakan Astro component dengan Tailwind.

4. Membuat Layout Utama

Buat src/layouts/Layout.astro:

---
interface Props {
  title: string;
  description?: string;
}

const { title, description = "Portfolio - Full Stack Developer" } = Astro.props;
---


  
    
    
    
    {title}
    
    
  
  
    
  

Perhatikan: tidak ada JavaScript bundle yang di-load. Ini kunci performa Astro. JavaScript hanya ditambahkan saat kamu benar-benar butuh interaktivitas (misal: dark mode toggle, form submission).

5. Hero Section yang Menarik

Hero section adalah kesan pertama. Buat src/components/Hero.astro:

---
---

Hello, saya

Nama Kamu

Full Stack Developer yang fokus membangun aplikasi web performa tinggi dengan teknologi modern.

Catat: tidak ada JavaScript sama sekali. Semua interactivity (hover effects) dilakukan dengan CSS Tailwind. Ini menghasilkan page yang sangat ringan dan cepat.

6. Project Cards dengan Content Collections

Astro punya fitur Content Collections yang memungkinkan kamu menyimpan konten dalam format Markdown dengan schema validation. Buat file src/content/config.ts:

import { defineCollection, z } from 'astro:content';

const projects = defineCollection({
  type: 'content',
  schema: z.object({
    title: z.string(),
    description: z.string(),
    tech: z.array(z.string()),
    image: z.string(),
    url: z.string().optional(),
    github: z.string().optional(),
    date: z.date(),
  })
});

export const collections = { projects };

Sekarang kamu bisa buat project baru cukup dengan menambah file Markdown di src/content/projects/:

---
title: "E-Commerce Platform"
description: "Platform e-commerce full-stack dengan payment gateway"
tech: ["Astro", "Tailwind", "PostgreSQL", "Stripe"]
image: "/images/project-ecommerce.webp"
github: "https://github.com/username/ecommerce"
date: 2026-01-15
---

Deskripsi lengkap project e-commerce ini ada di sini.
Kamu bisa tulis dalam format Markdown.

7. Responsive Design dengan Tailwind

Satu keunggulan Tailwind untuk portfolio: responsive design jadi sangat mudah. Contoh project card yang responsive:

---
const { title, description, tech, image } = Astro.props;
---
{title}

{title}

{description}

{tech.map(t => ( {t} ))}

Tanpa menulis satu baris CSS custom, kamu mendapatkan layout yang responsif, ada hover effect, dan terlihat profesional. Tailwind memang verbose di HTML, tapi untuk project yang tidak punya tim CSS dedicated, ini jauh lebih maintainable.

8. Deploy ke VPS

Bukan Vercel atau Netlify — kita deploy ke VPS sendiri. Build project:

npm run build

Output ada di dist/ folder. Untuk serve, saya pakai Nginx:

sudo apt install nginx -y
sudo cp -r dist/* /var/www/portfolio/
sudo nano /etc/nginx/sites-available/portfolio

Konfigurasi Nginx:

server {
    listen 80;
    server_name portfolio.toolkuy.com;
    root /var/www/portfolio;
    index index.html;

    location / {
        try_files $uri $uri/ $uri.html =404;
    }

    # Cache static assets
    location ~* .(jpg|jpeg|png|webp|css|js)$ {
        expires 30d;
        add_header Cache-Control "public, immutable";
    }
}

Enable site dan restart:

sudo ln -s /etc/nginx/sites-available/portfolio /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl restart nginx

Tambahkan SSL dengan acme.sh atau Certbot, dan portfolio kamu sudah live di internet.

9. SEO Optimization

Portfolio yang bagus tanpa SEO seperti toko bagus di gang sempit — tidak ada yang tahu. Pastikan kamu sudah menambahkan:

  • Meta tags: title, description, Open Graph tags untuk sharing di social media
  • Sitemap: Astro punya plugin @astrojs/sitemap yang otomatis generate sitemap.xml
  • Performance: Astro sudah optimal secara default — target Lighthouse 100
  • Internal linking: Link antar halaman dan project untuk SEO topical authority

Tambahkan sitemap:

npx astro add sitemap

Konfigurasi di astro.config.mjs:

import sitemap from '@astrojs/sitemap';

export default {
  site: 'https://portfolio.toolkuy.com',
  integrations: [tailwind(), sitemap()],
};

Penutup

Membangun portfolio website dengan Astro + Tailwind CSS menghasilkan website yang cepat, SEO-friendly, dan mudah di-maintain. Dengan total biaya hosting $5-6/bulan di VPS, kamu sudah punya portfolio profesional yang bisa menyaingi website agency.

Yang terpenting: mulai dari yang sederhana, lalu iterasi. Portfolio saya yang pertama cuma satu halaman dengan 3 project. Sekarang sudah berkembang menjadi blog + portfolio + tools. Mulai dulu, sempurnakan nanti.

Mau tahu lebih lanjut tentang deploy Astro ke VPS? Baca juga panduan deploy aplikasi web dengan Docker dan Nginx untuk langkah lebih detail tentang setup server.

10. Performance Optimization Tips

Astro sudah sangat cepat secara default, tapi ada beberapa optimasi tambahan yang saya terapkan di toolkuy.com yang meningkatkan performa lebih jauh:

10.1 Image Optimization

Gunakan Astro's built-in Image component untuk otomatis optimize gambar:

---
import { Image } from 'astro:assets';
import projectImg from '../images/project.webp';
---
<Image src={projectImg} alt="Project screenshot" loading="lazy" />

Astro akan otomatis generate multiple format (WebP, AVIF) dan responsive sizes. Tanpa optimasi ini, gambar portfolio yang besar bisa menambah 2-3 detik ke loading time.

10.2 View Transitions

Astro 4+ mendukung View Transitions untuk pengalaman SPA-like tanpa JavaScript framework:

---
import { ViewTransitions } from 'astro:transitions';
---
<head>
  <ViewTransitions />
</head>

Ini memberikan transisi halaman yang smooth (fade, slide) tanpa perlu React/Vue client-side rendering. Website terasa seperti SPA tapi dengan semua keuntungan SSG (SEO, performance, simple deployment).

10.3 Prefetching

Astro bisa prefetch halaman yang kemungkinan di-klik user berikutnya:

// astro.config.mjs
export default {
  prefetch: {
    prefetchAll: true,  // prefetch semua links
    defaultStrategy: 'viewport',  // prefetch saat link visible
  }
};

Dengan prefetching, navigasi antar halaman terasa instan karena konten sudah di-cache di browser. Di portfolio website saya, time-to-interactive antar halaman rata-rata <100ms karena prefetching.

11. Checklist Launch Portfolio

Sebelum launch, pastikan semua ini sudah ter-cover:

ItemToolsStatus
Lighthouse score 100Chrome DevToolsWAJIB
Mobile responsiveBrowser resizeWAJIB
SEO meta tagsView page sourceWAJIB
Sitemap.xml/sitemap-index.xmlWAJIB
Favicon + OG imageRealFaviconGeneratorREKOMENDASI
Contact formAstro + FormspreeREKOMENDASI
AnalyticsPlausible/UmamiREKOMENDASI
404 pageAstro pageREKOMENDASI
Accessibility checkaxe DevToolsOPSIONAL

12. Monetisasi Portfolio

Portfolio yang bagus bisa menghasilkan uang lebih dari sekadar mencari klien. Beberapa cara yang saya coba:

  • AdSense / ads: Jika portfolio punya blog dengan traffic lumayan, AdSense bisa menghasilkan $50-200/bulan. Tapi ini membutuhkan traffic yang konsisten (10K+ monthly visitors).
  • Affiliate links: Review tools yang kamu pakai dengan affiliate links. DigitalOcean, Vultr, dan Hostinger semua punya program affiliate yang lumayan.
  • Digital products: Jual template, boilerplate, atau mini-courses yang relevan dengan keahlian kamu.
  • Consulting CTA: Portfolio yang professional bisa jadi funnel untuk consulting gigs. Saya pernah dapat project Rp 15 juta dari satu email inquiry yang datang dari portfolio website saya.

Semua cara di atas membutuhkan portfolio yang sudah live dan SEO-optimized. Jadi mulai dulu, monetize nanti.

Penutup

Membangun portfolio website dengan Astro + Tailwind CSS menghasilkan website yang cepat, SEO-friendly, dan mudah di-maintain. Dengan total biaya hosting $5-6/bulan di VPS, kamu sudah punya portfolio profesional yang bisa menyaingi website agency.

Yang terpenting: mulai dari yang sederhana, lalu iterasi. Portfolio saya yang pertama cuma satu halaman dengan 3 project. Sekarang sudah berkembang menjadi blog + portfolio + tools. Mulai dulu, sempurnakan nanti.

Mau tahu lebih lanjut tentang deploy Astro ke VPS? Baca juga panduan deploy aplikasi web dengan Docker dan Nginx untuk langkah lebih detail tentang setup server.

10. Performance Optimization Tips

Astro sudah sangat cepat secara default, tapi ada beberapa optimasi tambahan yang saya terapkan di toolkuy.com yang meningkatkan performa lebih jauh:

10.1 Image Optimization

Gunakan Astro's built-in Image component untuk otomatis optimize gambar:

---
import { Image } from 'astro:assets';
import projectImg from '../images/project.webp';
---
<Image src={projectImg} alt="Project screenshot" loading="lazy" />

Astro akan otomatis generate multiple format (WebP, AVIF) dan responsive sizes. Tanpa optimasi ini, gambar portfolio yang besar bisa menambah 2-3 detik ke loading time.

10.2 View Transitions

Astro 4+ mendukung View Transitions untuk pengalaman SPA-like tanpa JavaScript framework:

---
import { ViewTransitions } from 'astro:transitions';
---
<head>
  <ViewTransitions />
</head>

Ini memberikan transisi halaman yang smooth (fade, slide) tanpa perlu React/Vue client-side rendering. Website terasa seperti SPA tapi dengan semua keuntungan SSG (SEO, performance, simple deployment).

10.3 Prefetching

Astro bisa prefetch halaman yang kemungkinan di-klik user berikutnya:

// astro.config.mjs
export default {
  prefetch: {
    prefetchAll: true,  // prefetch semua links
    defaultStrategy: 'viewport',  // prefetch saat link visible
  }
};

Dengan prefetching, navigasi antar halaman terasa instan karena konten sudah di-cache di browser. Di portfolio website saya, time-to-interactive antar halaman rata-rata <100ms karena prefetching.

11. Checklist Launch Portfolio

Sebelum launch, pastikan semua ini sudah ter-cover:

ItemToolsStatus
Lighthouse score 100Chrome DevToolsWAJIB
Mobile responsiveBrowser resizeWAJIB
SEO meta tagsView page sourceWAJIB
Sitemap.xml/sitemap-index.xmlWAJIB
Favicon + OG imageRealFaviconGeneratorREKOMENDASI
Contact formAstro + FormspreeREKOMENDASI
AnalyticsPlausible/UmamiREKOMENDASI
404 pageAstro pageREKOMENDASI
Accessibility checkaxe DevToolsOPSIONAL

12. Monetisasi Portfolio

Portfolio yang bagus bisa menghasilkan uang lebih dari sekadar mencari klien. Beberapa cara yang saya coba:

  • AdSense / ads: Jika portfolio punya blog dengan traffic lumayan, AdSense bisa menghasilkan $50-200/bulan. Tapi ini membutuhkan traffic yang konsisten (10K+ monthly visitors).
  • Affiliate links: Review tools yang kamu pakai dengan affiliate links. DigitalOcean, Vultr, dan Hostinger semua punya program affiliate yang lumayan.
  • Digital products: Jual template, boilerplate, atau mini-courses yang relevan dengan keahlian kamu.
  • Consulting CTA: Portfolio yang professional bisa jadi funnel untuk consulting gigs. Saya pernah dapat project Rp 15 juta dari satu email inquiry yang datang dari portfolio website saya.

Semua cara di atas membutuhkan portfolio yang sudah live dan SEO-optimized. Jadi mulai dulu, monetize nanti.

Penutup

Membangun portfolio website dengan Astro + Tailwind CSS menghasilkan website yang cepat, SEO-friendly, dan mudah di-maintain. Dengan total biaya hosting $5-6/bulan di VPS, kamu sudah punya portfolio profesional yang bisa menyaingi website agency.

Yang terpenting: mulai dari yang sederhana, lalu iterasi. Portfolio saya yang pertama cuma satu halaman dengan 3 project. Sekarang sudah berkembang menjadi blog + portfolio + tools. Mulai dulu, sempurnakan nanti.

Mau tahu lebih lanjut tentang deploy Astro ke VPS? Baca juga panduan deploy aplikasi web dengan Docker dan Nginx untuk langkah lebih detail tentang setup server.

💬 Komentar (0)

Belum ada komentar. Jadilah yang pertama! 💬

Komentar akan muncul setelah moderasi.