Production-ready personal brand website for Massi Mapani built with:
- Next.js App Router
- TypeScript
- Tailwind CSS
- Framer Motion
- Lucide icons
.
├── public/
│ ├── images/ # Placeholder visuals + OG image
│ └── press/ # Press kit placeholder PDF
├── src/
│ ├── app/ # App Router pages + API routes
│ ├── components/ # Reusable UI components
│ ├── content/
│ │ └── site.config.ts # Main config-driven content source
│ └── lib/ # Utilities, analytics, mailer, content helpers
├── .env.example
├── next.config.ts
├── tailwind.config.ts
└── package.json- Install dependencies:
npm install- Start dev server:
npm run dev- Open:
http://localhost:3000npm run build
npm startCopy .env.example to .env.local and fill values:
cp .env.example .env.localNEXT_PUBLIC_SITE_URL: canonical URL (set tohttps://massinmapani.comin production)NEXT_PUBLIC_GA_MEASUREMENT_ID: optional GA4 IDNEXT_PUBLIC_PLAUSIBLE_DOMAIN: optional Plausible domainCONTACT_RECEIVER_EMAIL: where contact form messages are sentSMTP_HOST,SMTP_PORT,SMTP_USER,SMTP_PASS,SMTP_FROM: SMTP credentials for nodemailer
If SMTP env vars are missing, contact submissions are logged to server console (TODO fallback).
Edit src/content/site.config.ts:
- navigation
- hero copy
- About copy
- work case studies
- speaking/media entries
- partnership cards/logos
- products + Gumroad URLs
- social links + social stats
- contact text
All main page content is sourced from this file.
Current images are placeholders in public/images/.
Replace with your own photos and update paths in src/content/site.config.ts.
Recommended naming:
/public/images/massi-home-hero.jpg/public/images/massi-about.jpg/public/images/massi-tile-*.jpg/public/images/og-share.jpg
Replace:
public/press/massi-mapani-press-kit.pdf
with your final press kit PDF.
Implemented:
- global metadata in
src/app/layout.tsx - canonical URL
- Open Graph + Twitter card
src/app/sitemap.tssrc/app/robots.ts
- Push this repo to GitHub.
- In Hostinger hPanel, create a Node.js app.
- Set Node version to 20.x (or latest LTS supported by Hostinger).
- Connect GitHub repository.
- Set build and start commands:
- Build:
npm run build - Start:
npm start
- Build:
- Configure environment variables from
.env.examplein hPanel. - Set app root to repository root.
- Point domain
massinmapani.comto the Node app.
- Newsletter API stores subscribers in
src/content/subscribers.jsonfor now. - For production-scale capture, replace with database/email provider (e.g., Supabase, ConvertKit, MailerLite).
- Contact API uses SMTP when configured and logs fallback payload otherwise.


