Personal portfolio and blog for Rivaldi Putra, a frontend and product engineer. The site showcases professional experience, selected projects, open source contributions, technical skills, and engineering articles.
Built as a static site with Eleventy and Tailwind CSS.
- Static portfolio pages for home, about, projects, and blog
- Markdown-powered blog posts under
posts/ - Shared Eleventy layouts and partials under
_includes/ - Global content/data modules under
_data/ - Tailwind CSS 4 styling with custom design tokens
- Syntax highlighting for blog/code content
- Responsive portrait images served from
images/ - SEO metadata managed through
_data/site.js
- Static site generator: Eleventy
- Styling: Tailwind CSS 4
- Animation utilities:
tw-animate-css - Syntax highlighting:
@11ty/eleventy-plugin-syntaxhighlight - Package manager: pnpm lockfile is included
- Node.js
- pnpm, npm, or another Node package manager
Using pnpm is recommended because pnpm-lock.yaml is included.
pnpm installIf you prefer npm:
npm installnpm run buildThis command:
- Builds Tailwind CSS from
input.cssintoindex.css - Runs Eleventy
- Outputs the static site to
_site/
npm run serveThe local Eleventy server runs on:
http://localhost:8081
| Script | Description |
|---|---|
npm run build |
Builds Tailwind CSS and generates the Eleventy site into _site/. |
npm run serve |
Builds Tailwind CSS and starts Eleventy dev server on port 8081. |
npm test |
Placeholder script only; no tests are currently configured. |
.
├── _data/ # Global Eleventy data files
│ ├── experience.js
│ ├── projects.js
│ ├── site.js
│ └── skills.js
├── _includes/ # Eleventy layouts and templates
│ ├── layout.html
│ └── post.html
├── images/ # Static images passed through to output
├── posts/ # Markdown blog posts
├── about.html # About page
├── blog.html # Blog listing page
├── index.html # Home page
├── input.css # Tailwind source CSS
├── index.css # Generated CSS copied to output
├── projects.html # Projects page
├── .eleventy.js # Eleventy configuration
└── package.json
Edit global site information in:
_data/site.js
This includes the site name, URL, author, description, keywords, analytics ID, and social profile metadata.
Edit work experience in:
_data/experience.js
The About page reads this data automatically.
Edit selected projects in:
_data/projects.js
Each project supports a title, description, tags, and URL.
Edit grouped technical skills in:
_data/skills.js
Add markdown files to:
posts/
Blog posts should include Eleventy frontmatter. Example:
---
layout: post.html
title: Example Post
excerpt: A short description of the post.
date: 2026-01-01
category: Frontend
---
Write the post content here.Tailwind source styles live in:
input.css
The generated stylesheet is:
index.css
Eleventy passthrough-copies index.css and images/ into the generated _site/ directory.
This project outputs a fully static site in _site/, so it can be deployed to static hosting platforms such as Netlify, Vercel, Cloudflare Pages, GitHub Pages, or any web server that can serve static files.
Use this build command:
npm run buildUse this output directory:
_site
- There are currently no configured linters or automated tests.
index.cssis generated frominput.css; avoid hand-editing generated CSS unless intentionally overriding the build output.- Blog and portfolio content are managed through Eleventy templates and
_datamodules rather than a CMS.