A premium, high-performance personal portfolio built with the modern Jamstack architecture.
Decoupled presentation layer from content management β fast, scalable, and always in sync.
| Layer | Technology | Purpose |
|---|---|---|
| Framework | Next.js (App Router) | Routing, SSG, ISR, API Routes |
| Language | TypeScript | Static typing, compile-time safety |
| Styling | Tailwind CSS | Dark mode, glassmorphism, bento grid |
| Animations | Framer Motion | Micro-interactions, page transitions |
| CMS | Sanity.io | Headless content management |
| Deployment | Vercel | CI/CD, auto-deploy on push |
The system uses a modern decoupled (Jamstack) architecture with three main layers:
src/
βββ app/
β βββ layout.tsx # Root layout (Navbar, Footer, Dark Mode init)
β βββ page.tsx # Homepage (Hero, Skills, Project Highlights)
β βββ projects/
β β βββ page.tsx # All Projects page (Bento grid layout)
β β βββ [slug]/
β β βββ page.tsx # Dynamic Project Detail page
β βββ about/
β β βββ page.tsx # About page (Full profile + CV download)
β βββ api/
β βββ revalidate/ # ISR Webhook handler from Sanity
βββ components/
β βββ ui/ # Buttons, Cards, Inputs (glassmorphism styles)
β βββ sanity/ # Portable Text renderer for Sanity content
βββ sanity/
βββ schemas/ # Data model definitions (project.ts, author.ts)
βββ lib/ # Sanity client, GROQ query configs
project β Portfolio Projects| Field | Type | Description |
|β|β|β|
| title | String | Project or research name |
| slug | Slug | Unique URL identifier (e.g. sistem-pakar-diagnosa) |
| summary | Text | Short project summary |
| coverImage | Image | Main screenshot / banner |
| techStack | String[] | Technologies used (e.g. "Python", "React") |
| repositoryUrl | URL | GitHub repository link |
| content | Portable Text | Deep-dive: background, methodology, test results |
author β Owner Profile| Field | Type | Description |
|β|β|β|
| name | String | Full name |
| bio | Block Content | Education background and expertise (AI & SE) |
| resume | File | PDF Curriculum Vitae |
| socialLinks | Object[] | LinkedIn, GitHub, Email links |
git clone https://github.com/aryasetiap/aryasetiap.github.io.git
cd aryasetiap.github.io
npm install
.env.local file at the root:
NEXT_PUBLIC_SANITY_PROJECT_ID=your_project_id
NEXT_PUBLIC_SANITY_DATASET=production
SANITY_API_TOKEN=your_api_token
npm run dev
Open http://localhost:3000.
This project uses a zero-downtime, fully automated deployment pipeline:
main β every git push triggers an automatic build.POST to /api/revalidate every time a project or author document is published, triggering ISR to refresh only the affected pages β keeping the site fast and data always in sync.Made with β€οΈ by Arya Setia Pratama