A minimal, fast, and fully customizable personal portfolio built with Next.js App Router. Renders pinned GitHub repositories and latest Medium posts at runtime with ISR.
Live: algotyrnt.com
| Area | Tooling |
|---|---|
| Framework | Next.js 16 (App Router) |
| Language | TypeScript |
| UI | MUI + Emotion |
| Animation | Framer Motion |
| Analytics | Vercel Analytics + Speed Insights |
src/
├── app/ # Routes, metadata, robots, sitemap
├── components/
│ ├── layout/ # header.tsx, footer.tsx
│ ├── sections/ # about, work, projects, blogs, connect, privacy
│ ├── theme/ # MUI + Emotion setup
│ └── ui/ # fade-in, stagger animation primitives
├── lib/
│ ├── api/ # GitHub GraphQL + Medium RSS fetchers
│ ├── config.ts # Typed env exports
│ └── types.ts # Shared TypeScript types
- Node.js 20+
- npm
- Optional: GitHub personal access token for Projects section
git clone https://github.com/algotyrnt/nova.git
cd novanpm installcp .env.example .env.localUpdate .env.local with your content.
Important notes:
SITE_KEYWORDS,WORK_EXPERIENCE, andSOCIAL_LINKSmust be valid JSON.GITHUB_TOKENis optional in code. If not set (or invalid), the Projects section simply returns no items.MEDIUM_USERNAMEcontrols the Medium feed endpoint.
npm run devOpen http://localhost:3000.
All content is driven by environment variables — no CMS required. See .env.example for the full list.
| Variable | Purpose |
|---|---|
AUTHOR_NAME |
Full name used in page metadata |
TWITTER_HANDLE |
Twitter/X username (without @) for SEO |
EMAIL |
Contact email in Connect and footer |
WEBSITE_URL |
Canonical site URL |
SITE_NAME |
Site title |
SITE_DESCRIPTION |
Meta description |
ABOUT_TEXT |
About section body text |
SITE_KEYWORDS |
JSON array of SEO keywords |
WORK_EXPERIENCE |
JSON array of work entries |
SOCIAL_LINKS |
JSON array of social links |
GITHUB_USERNAME |
GitHub username for pinned repos |
GITHUB_TOKEN |
GitHub token for GraphQL API (optional) |
MEDIUM_USERNAME |
Medium username for RSS feed |
SITE_KEYWORDS, WORK_EXPERIENCE, and SOCIAL_LINKS must be valid JSON. If GITHUB_TOKEN is unset, the Projects section is hidden automatically.
Set the environment variables from .env.example in your Vercel project settings.
npm run dev # Development server
npm run build # Production build
npm run check # Lint + type checkSee CONTRIBUTING.md.