Why Nexfolio
What makes it better
than the alternatives
- 01
MongoDB-embedded media storage
MongoDB-embedded media storage
- 02
Voice greeting player
Voice greeting player
- 03
Service pricing with quote prefill
Service pricing with quote prefill
- 04
First-party visitor analytics
First-party visitor analytics
- 05
Resume builder with print layout
Resume builder with print layout
Public Portfolio Site
- Homepage with hero
- highlights
- services
- featured projects
- about
- skills
- experience
- testimonials
- education
- blog posts
- FAQ and contact sections
- Project case studies with galleries
- technology tags
- linked testimonials and search/filter explorer
- Blog with categories
- tags
- table of contents
- share buttons
- related posts and RSS feed
- Services page with pricing
- process steps and quote button that prefills contact form
- Resume page with structured CV that prints as A4 PDF
- Custom pages (e.g. /privacy) with Markdown content
- Light/dark theme toggle with system preference detection
- SEO: sitemap
- robots.txt
- Open Graph images
- JSON-LD (Person
- CreativeWork
- BlogPosting
- FAQPage
- ProfessionalService)
Admin Dashboard & CMS
- Dashboard with real-time metrics
- date range filters and analytics reports
- CRUD for projects (duplicate
- feature
- reorder
- archive
- draft/published
- per-item SEO)
- Blog post editor (draft/scheduled/published/archived
- preview
- categories
- tags)
- Services management with pricing
- process steps and most-popular highlight
- Testimonials
- FAQs
- skills
- experience and education editors
- Custom pages editor with Markdown support
- Profile settings: hero intro
- highlights
- companies
- about text
- Voice greeting upload with autoplay and transcript
- Website settings: branding
- theme
- homepage section order and visibility
- SEO settings: titles
- descriptions
- Google Search Console verification
Media Library
- Upload images (JPEG
- PNG
- WebP
- SVG)
- audio (MP3
- WAV
- OGG) and PDFs
- Binary storage in MongoDB with MIME sniffing and dimension calculation
- HTTP 206 Partial Content streaming for audio/video playback
- Usage tracking: shows which projects
- posts or pages use each file
- Replace-everywhere: swap a file and update all references
- Usage-aware deletion: prevents removing files still in use
- Thumbnail generation and preview for images
Contact Inbox
- Contact form with honeypot spam trap and rate limiting
- Inbox with read/unread
- pending/replied/spam/archived status
- Internal notes field for each message
- Reply tracking: mark messages as replied with timestamp
- Email validation and sanitization
- IP address logging with HMAC hashing for privacy
Visitor Analytics
- Cookie-less tracking with IP hashing and device fingerprinting
- Referrer source detection (direct
- search
- social
- referral)
- User agent parsing for device type and browser
- Daily visitor counts with date range filters
- Page view tracking with path and query parameters
- CSV export for external analysis
- Time zone configuration for day boundaries
- Google Analytics 4 integration (optional measurement ID)
Authentication & Security
- Admin user accounts with owner/editor roles
- Session-based authentication with HTTP-only cookies
- Password hashing with scrypt (32-byte salt
- 64-byte key)
- Account lockout after 5 failed login attempts (15-minute cooldown)
- Session management: view active sessions
- revoke others
- sign out all
- Password change with current password verification
- Sign-in history with IP address and user agent
- HMAC secret generation and storage in database
- Rate limiting on login
- contact form and visitor tracking
Audit & Operations
- Activity log: tracks admin actions (login
- logout
- content changes
- settings updates)
- Error log: captures exceptions with stack traces and context
- Database health check: connection status and collection statistics
- Integration health: MongoDB connection
- session count
- media storage usage
- CLI scripts: create admin
- reset password
- seed starter data
- check database
- Automated session cleanup via MongoDB TTL indexes
- Login event retention (90 days)
Resume Builder
- Structured CV editor: personal info
- summary
- skills
- experience
- education
- certifications
- Multiple print templates with A4 layout
- PDF generation via browser print dialog
- Public /resume page with print button
- Downloadable PDF link in navigation
- Experience and education sections with date ranges and descriptions
- Skills grouped by category with proficiency levels
| Language | Version | Framework | Used for | Share of code |
|---|---|---|---|---|
| TypeScript (React) | — | — | Front-end | 61.2% |
| TypeScript | — | — | Front-end | 34.1% |
| CSS | — | — | Styling | 3.6% |
| SQL | — | — | Database | 1.1% |
- Primary language
- TypeScript 5
- Framework
- Next.js 15.5.7 (App Router, React 19)
- Database
- MongoDB 4.4+
- Authentication
- Session cookies (bcrypt/scrypt password hashing, HMAC tokens)
- Licence
- Single-site
- Screens
- 42
- Database tables
- 16
- Supported languages
- English only
- Browser support
- Modern browsers (Chrome, Firefox, Safari, Edge) with ES2020+ support
| Minimum | Recommended | |
|---|---|---|
| CPU | 1 vCPU | 2 vCPU |
| RAM | 512 MB | 2 GB |
| OS | Node.js 20.12+ on Linux/macOS/Windows | Node.js 20.12+ on Linux/macOS/Windows |
| Est. monthly hosting | $10 | $10 |
```bash # Install Vercel CLI npm i -g vercel # Deploy vercel --prod # Add environment variable in Vercel dashboard: # MONGODB_URI=mongodb+srv://USER:PASSWORD@cluster.mongodb.net/portfolio ```
```bash # Clone and configure git clone <repo> cd nexfolio cp .env.example .env # Edit .env and set MONGODB_URI # Build and run docker-compose up -d # Create first admin docker exec nexfolio-app pnpm admin:create # Access at http://localhost:3000 ```
```bash # Install Node.js 20 curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt-get install -y nodejs # Install pnpm corepack enable corepack prepare pnpm@latest --activate # Clone and setup git clone <repo> cd nexfolio cp .env.example .env # Edit .env with MongoDB Atlas URI # Install and build pnpm install pnpm build # Seed database pnpm db:seed --yes # Run with PM2 npm i -g pm2 pm2 start npm --name nexfolio -- start pm2 save pm2 startup # Setup nginx reverse proxy on port 80/443 ```
```bash # Install dependencies pnpm install # Start local MongoDB (requires Docker) pnpm db:local # In new terminal, seed database pnpm db:seed --yes # Start dev server pnpm dev # Access at http://localhost:3000 # Admin login: demo1@gmail.com / demo1 ```
Quality report
Manually reviewedHow to read the quality report
What this is. Every project on Vibe96 goes through an automated audit of its source code before a reviewer in Dubai checks it by hand. The score is out of 100; 75 is the minimum to be listed, and any single failing check blocks a listing regardless of the score.
- Security
- No real credentials in the code, every data-changing route protected, admin areas role-gated, no SQL built from user input.
- Code structure
- A developer can navigate and extend it: clear module boundaries, no giant files, little copy-paste.
- Docs & completeness
- The setup guide, example config, schema and required files the builder committed to are actually in the archive.
- Dependency health
- Packages pinned, no known critical vulnerabilities, no abandoned libraries in production paths.
- Build & deploy
- A clean machine can restore, build and start it by following the shipped instructions.
Warnings are problems that didn't block the listing; they stay visible here until a later version clears them. The audit reads the code — it does not run it — so always try the live demo before you buy. Lines of code are counted from the same audited archive.
92/ 100
Automated audit score
✓ Passed the auditReviewer notes (4 minor)
Strong authentication guards on all admin routes; minor ownership gaps on visitor detail reads; mongodb schema lacks foreign key constraints and some indexes; no sql injection risk; moderate duplication and some oversized validation schemas; generally well-structured. None of these stop the software from working; the developer has been told and improvements come in a future update.
Versions & updates
No updates yet. New versions appear here with a changelog.
Buyers receive updates free for 1 year.
What you get
- </>Full source codeThe complete audited source, delivered as a download from your account. No obfuscation.
- ▤DocumentationSetup guide, architecture notes, CLAUDE.md and AGENTS.md.
- ↻One year of updatesEvery new version the builder publishes, free for 12 months.
- ♧30 days of supportInstallation and defect support through Vibe96 tickets.