Personal website for Anandarupa Dhar, Economist β’ Activist β’ Curious Thinker.
Built with Next.js, Tailwind CSS, Framer Motion, D3.js, and Recharts.
Important: To enable automatic deployment to GitHub Pages:
main branchhttps://anandrupa.me (custom domain) or https://Anandarupa-web.github.io/anandarupa.github.io/The repository is already configured with the necessary GitHub Actions workflow (.github/workflows/deploy.yml), CNAME file for the custom domain, and .nojekyll file to prevent Jekyll processing.
βMaps & Movements, Nodes & Narrativesβ: a personality-first site capturing the dual identity of an empirical economist and student activist. Visual metaphors include contour maps, force-graph nodes, stitched textile textures, and documentary-style imagery.
# Install dependencies
npm install
# Run development server
npm run dev
# Build for production (static export)
npm run build
# The static site is output to the /out directory
Open http://localhost:3000 to view the site locally.
src/
βββ app/ # Next.js App Router pages
β βββ page.tsx # Home / Hero page
β βββ about/page.tsx # About: Narrative Timeline
β βββ research/page.tsx # Research & Projects (filterable)
β βββ publications/page.tsx # Publications with JSON-LD schema
β βββ activism/page.tsx # Activism & Leadership
β βββ notes/page.tsx # Notes / Microblog
β βββ tools/page.tsx # Interactive Tools (D3, charts, QA)
β βββ contact/page.tsx # Contact form
β βββ layout.tsx # Root layout with nav + footer
β βββ globals.css # Theme tokens, stitch/contour styles
βββ components/
β βββ Navigation.tsx # Responsive nav with mobile menu
β βββ Footer.tsx # Site footer
β βββ ForceGraph.tsx # D3 co-author network graph
βββ content/notes/ # MDX blog posts (source content)
β βββ why-spatial-thinking-matters.mdx
β βββ do-employees-really-matter.mdx
β βββ data-democracy-student-voices.mdx
βββ data/
βββ research.json # Research projects with mock data
βββ publications.json # Publications list
βββ timeline.json # Timeline nodes for About page
βββ qa.json # Q&A for "Ask Anandarupa" feature
| Page | Route | Description |
|---|---|---|
| Home | / |
Split hero with bio and animated contour map |
| About | /about |
Interactive vertical timeline |
| Research | /research |
Filterable project gallery with mini-charts |
| Publications | /publications |
Searchable list with JSON-LD schema |
| Activism | /activism |
Carousel/mosaic with stitch textile motif |
| Notes | /notes |
Microblog with expandable posts |
| Tools | /tools |
D3 force graph, map demo, data explorer, Q&A |
| Contact | /contact |
Contact form with honeypot spam protection |
| Color | Hex | Usage |
|---|---|---|
| Deep Teal | #0F5660 |
Navigation, headings, timeline |
| Warm Amber | #F0A500 |
CTAs, active states, accents |
| Charcoal | #1F2933 |
Body text, footer |
| Off-White | #FCFBFA |
Backgrounds |
vercel.json adds security headers automaticallynpm run buildoutnetlify.toml configures build and security headersThis repository includes a GitHub Actions workflow (.github/workflows/deploy.yml) that automatically builds and deploys to GitHub Pages on every push to main.
One-Time Setup Required:
main; the site will deploy automatically on each pushhttps://anandrupa.me (custom domain) or https://Anandarupa-web.github.io/anandarupa.github.io/Why this fixes the README display issue:
public/ directory, ensuring itβs included in the build output.nojekyll file prevents GitHub from using Jekyll processing on the siteThe contact form on the /contact page uses Netlify Forms by default (via data-netlify="true" attribute). To configure for your deployment:
No additional configuration needed. Netlify automatically detects the form.
src/app/contact/page.tsxonSubmit handlerbot-field) provides basic spam protectionAll images currently use Unsplash URLs as placeholders. To replace with your own images:
public/images/ directorysrc attributes in the relevant page componentalt text to describe the actual imageImage locations:
src/app/activism/page.tsx): Three carousel imagesprefers-reduced-motion support (animations disabled)