Premium minimal portfolio for Samir Abdumo'minov, built with Next.js, TypeScript, Tailwind CSS, Framer Motion, and Lucide icons.
- One-page developer portfolio with polished sections, projects, blog previews, and contact links.
- Editable blog system backed by local JSON content.
- Hidden admin route at
/adminfor managing posts. - Signed HttpOnly admin session cookie.
- SEO metadata, sitemap, robots file, and custom minimalist logo.
- Light/dark theme support.
npm install
npm run devOpen http://localhost:3000.
Create .env or .env.local:
ADMIN_PASSWORD="replace-with-a-long-random-password"
ADMIN_SESSION_SECRET="replace-with-a-different-long-random-secret"The admin link is intentionally not shown in the public command menu or navigation. Visit /admin directly.
For production on Vercel, add the same variables in Project Settings -> Environment Variables. Without ADMIN_PASSWORD, admin login is disabled.
Blog content lives in:
src/data/blog-posts.json
The admin UI writes to that file in local development. On Vercel/serverless, it writes to /tmp/blog-posts.json by default to avoid read-only source files. You can override that with BLOG_POSTS_FILE, but durable production edits should still move to a database or CMS such as Supabase, Neon, Sanity, or Vercel Blob because serverless runtime files are not permanent.
npm run lint
npm run buildThis project is optimized for Vercel. Before deploying production admin features, set:
ADMIN_PASSWORDADMIN_SESSION_SECRET
Never commit real environment values.