Skip to content

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

Β 

History

24 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

ProFolio Banner



πŸš€ ProFolio β€” Portfolio Generator with OTP Authentication

Sign up. Verify. Build your dream portfolio β€” in minutes.

Node.js Express.js MongoDB Nodemailer Twilio


GitHub stars GitHub forks GitHub issues License


πŸ” Passwordless Auth Β Β·Β  ⚑ Instant Portfolio Β Β·Β  🎨 Dark Theme UI Β Β·Β  πŸ“± Fully Responsive


πŸ“‹ Table of Contents


✨ Overview

ProFolio is a full-stack web application that lets users register, authenticate via OTP (email or SMS), fill in their professional details, and instantly generate a stunning personal portfolio website β€” no coding required.

Sign Up β†’ OTP Verification β†’ Dashboard β†’ Fill Details β†’ Portfolio Generated! πŸŽ‰

πŸ“Έ Screenshots

πŸ” Authentication

Login Page OTP Verification
Login Page OTP Verification

🏠 Dashboard & Portfolio Builder

Welcome Dashboard Fill Portfolio Details
Dashboard Portfolio Form
AI Features Overview Competitive Programming Profiles
Features Coding Profiles
Portfolio Saved Successfully βœ…
Portfolio Saved

🎨 Generated Portfolio Output

Hero Section
Portfolio Hero
About Me My Skills
About Me Section Skills Section
Education & Projects Competitive Coding Profiles
Education & Projects Coding Profiles Portfolio
Contact Section
Contact Section

🎯 Features

πŸ”‘ Authentication

  • βœ… Sign up with email or phone number
  • βœ… Passwordless login via 5-digit OTP
  • βœ… OTP delivery via Nodemailer (email) and Twilio (SMS)
  • βœ… OTP auto-expires and is single-use
  • βœ… Secure sessions with JWT

πŸ§‘β€πŸ’Ό Portfolio Builder

  • βœ… Personal Info β€” Name, Age, Email, Phone, Address, Language
  • βœ… Skills with animated circular progress indicators
  • βœ… Education timeline (School β†’ College β†’ University)
  • βœ… Projects with GitHub repository links
  • βœ… Competitive Programming β€” LeetCode & CodeChef ratings
  • βœ… Contact form with social links (GitHub, LinkedIn, Instagram, Email)
  • βœ… Beautiful dark-themed generated portfolio

πŸ€– AI-Powered Capabilities

  • βœ… Instant Portfolio Creation
  • βœ… Customizable Templates
  • βœ… AI-Optimized Content Suggestions
  • βœ… Easy File Integration
  • βœ… SEO & Visibility Boost
  • βœ… Auto-Save & Backup
  • βœ… Analytics & Insights
  • βœ… Multi-Device Access

πŸ› οΈ Tech Stack

Frontend

Technology Purpose
HTML5 / CSS3 Markup & Styling
JavaScript (ES6+) Client-side interactivity
React / Vite Component-based UI

Backend

Technology Purpose
Node.js Runtime environment
Express.js Web framework & REST API
JWT Secure session tokens

OTP / Messaging

Service Purpose
Nodemailer Email OTP via Gmail SMTP
Twilio SMS OTP

Database

Technology Purpose
MongoDB User data, sessions, portfolios
Mongoose ODM & schema modeling

πŸ“ Project Structure

profolio/
β”‚
β”œβ”€β”€ πŸ“‚ backend/
β”‚   β”œβ”€β”€ πŸ“‚ config/
β”‚   β”‚   β”œβ”€β”€ db.js                  # MongoDB connection
β”‚   β”‚   └── nodemailer.js          # Email transport setup
β”‚   β”œβ”€β”€ πŸ“‚ controllers/
β”‚   β”‚   β”œβ”€β”€ authController.js      # Signup, OTP send/verify
β”‚   β”‚   └── portfolioController.js # Create, update, fetch portfolio
β”‚   β”œβ”€β”€ πŸ“‚ middleware/
β”‚   β”‚   β”œβ”€β”€ authMiddleware.js      # JWT verification
β”‚   β”‚   └── rateLimiter.js         # OTP rate limiting
β”‚   β”œβ”€β”€ πŸ“‚ models/
β”‚   β”‚   β”œβ”€β”€ User.js                # User schema
β”‚   β”‚   β”œβ”€β”€ OTP.js                 # OTP schema (hashed + expiry)
β”‚   β”‚   └── Portfolio.js           # Full portfolio schema
β”‚   β”œβ”€β”€ πŸ“‚ routes/
β”‚   β”‚   β”œβ”€β”€ authRoutes.js          # /api/auth/*
β”‚   β”‚   └── portfolioRoutes.js     # /api/portfolio/*
β”‚   β”œβ”€β”€ πŸ“‚ services/
β”‚   β”‚   β”œβ”€β”€ emailService.js        # Nodemailer OTP sender
β”‚   β”‚   └── smsService.js          # Twilio OTP sender
β”‚   β”œβ”€β”€ .env
β”‚   β”œβ”€β”€ server.js
β”‚   └── package.json
β”‚
β”œβ”€β”€ πŸ“‚ frontend/
β”‚   β”œβ”€β”€ πŸ“‚ src/
β”‚   β”‚   β”œβ”€β”€ πŸ“‚ pages/
β”‚   β”‚   β”‚   β”œβ”€β”€ Login.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ OTPVerify.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ Dashboard.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ PortfolioForm.jsx
β”‚   β”‚   β”‚   └── Portfolio.jsx      # Generated portfolio output
β”‚   β”‚   β”œβ”€β”€ App.jsx
β”‚   β”‚   └── main.jsx
β”‚   β”œβ”€β”€ vite.config.js
β”‚   └── package.json
β”‚
└── README.md

βš™οΈ Installation

Prerequisites

1. Clone the Repository

git clone https://github.com/yourusername/profolio.git
cd profolio

2. Install Dependencies

# Backend
cd backend
npm install

# Frontend
cd ../frontend
npm install

πŸ”§ Configuration

Create a .env file in /backend:

# ── Server ───────────────────────────────────────
PORT=5000
NODE_ENV=development

# ── Database ─────────────────────────────────────
MONGO_URI=mongodb+srv://<username>:<password>@cluster.mongodb.net/profolio_db

# ── JWT ──────────────────────────────────────────
JWT_SECRET=your_super_secret_jwt_key
JWT_EXPIRES_IN=7d

# ── OTP Settings ─────────────────────────────────
OTP_EXPIRY_MINUTES=10
OTP_LENGTH=5

# ── Nodemailer (Email OTP) ────────────────────────
EMAIL_HOST=smtp.gmail.com
EMAIL_PORT=587
EMAIL_USER=your_email@gmail.com
EMAIL_PASS=your_gmail_app_password

# ── Twilio (SMS OTP) ─────────────────────────────
TWILIO_ACCOUNT_SID=ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
TWILIO_AUTH_TOKEN=your_twilio_auth_token
TWILIO_PHONE_NUMBER=+1234567890

⚠️ Never commit .env to Git β€” add it to .gitignore.


πŸš€ Running the App

# Terminal 1 β€” Backend (http://localhost:5000)
cd backend
npm run dev

# Terminal 2 β€” Frontend (http://localhost:5173)
cd frontend
npm run dev

πŸ“Œ API Endpoints

πŸ” Auth β€” /api/auth

Method Endpoint Description Auth
POST /signup Register with email or phone ❌
POST /send-otp Send OTP via email or SMS ❌
POST /verify-otp Verify OTP & receive JWT ❌
GET /logout Invalidate session βœ…

πŸ§‘β€πŸ’Ό Portfolio β€” /api/portfolio

Method Endpoint Description Auth
POST /create Submit portfolio details βœ…
GET /:username Fetch generated portfolio ❌
PUT /update Update portfolio βœ…
DELETE /delete Delete portfolio βœ…

Example β€” Verify OTP

POST /api/auth/verify-otp
Content-Type: application/json

{
  "contact": "user@example.com",
  "otp": "49961"
}
{
  "success": true,
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "user": { "id": "64abc...", "email": "user@example.com" }
}

🌐 Portfolio Fields

{
  "portfolioName": "My Portfolio",
  "personalInfo": {
    "name": "Ishan Bagra",
    "age": 20,
    "email": "ishanbagra18@gmail.com",
    "phone": "6377253179",
    "address": "A-116 Kardhani, Jaipur, Rajasthan"
  },
  "skills": [
    { "name": "JavaScript", "level": 89 },
    { "name": "Node.js",    "level": 75 },
    { "name": "React.js",   "level": 80 },
    { "name": "HTML",       "level": 90 },
    { "name": "CSS",        "level": 70 },
    { "name": "Angular",    "level": 65 }
  ],
  "education": [
    { "degree": "B.Tech", "institution": "IIIT Kota", "year": "2022 - Present" },
    { "degree": "College", "institution": "iiitkota",  "year": "2020 - 2022"   },
    { "degree": "School",  "institution": "St Teresa", "year": "2008 - 2020"   }
  ],
  "projects": [
    { "title": "Skylink",       "description": "Real-time in-flight communication system", "githubUrl": "..." },
    { "title": "Love-Advisor",  "description": "AI chatbot to resolve interpersonal conflicts", "githubUrl": "..." },
    { "title": "Dicegame",      "description": "A predictable dice game for timepass", "githubUrl": "..." }
  ],
  "competitiveProgramming": {
    "leetcode":  { "profile": "https://leetcode.com/u/ishanbagra/",       "rating": 1518 },
    "codechef":  { "profile": "https://www.codechef.com/START141D",       "rating": 1489 }
  },
  "contact": {
    "github": "https://github.com/...",
    "linkedin": "https://linkedin.com/in/...",
    "instagram": "https://instagram.com/...",
    "email": "ishanbagra18@gmail.com"
  }
}

🀝 Contributing

# 1. Fork this repo
# 2. Create your feature branch
git checkout -b feature/your-feature

# 3. Commit (Conventional Commits style)
git commit -m "feat: add your feature"

# 4. Push & open a Pull Request
git push origin feature/your-feature

πŸ“„ License

Licensed under the MIT License β€” see LICENSE for details.


Built with ❀️ by Ishan Bagra

⭐ Star this repo if you found it helpful! ⭐

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages