Single-page portfolio site for Valmeeki Singh. The frontend is a static portfolio page built from index.html plus supporting CSS, JavaScript, images, and a Django backend for the contact form.
index.html- the full portfolio page, including all sections, styles, and scriptscss/- shared styles and section-specific CSS filesjs/main.js- JavaScript for typing effects, filters, modals, lightbox, and form handlingsections/- section-level HTML files used as editing referencesimages/- profile assets, screenshots, certificates, and project imagesbackend/- Django contact API used by the portfolio form
Open index.html directly in a browser, or serve the folder with a local server for better asset handling.
Example with Python:
python -m http.server 5500Then open http://127.0.0.1:5500.
If you want the contact form to send messages, use the Django backend in backend/.
cd backend
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
python manage.py migrate
python manage.py runserverThe API defaults to http://127.0.0.1:8000.
- Hero: name, role text, CTA buttons, resume link
- About: short bio, profile image, social links
- Projects: PMEC-X, TweetForge AI, dashboard, portfolio
- Skills: stack summary and certifications
- Achievements: competitions and certificates
- Design: UI/UX, Photoshop, and poster work
- Writing: PMEC-X paper and other articles
- Contact: form plus direct contact links
- Find the matching project card in the Projects section
- Update the title, description, tags, and links
- If needed, update the matching
projectDetailsentry in the script block near the bottom ofindex.html
- Find the card inside the Writing section
- Update the title, status badge, excerpt, and article modal data
- For conference papers, keep the card summary short and put full author/mentor details in the modal body
- Replace files inside
images/and keep the same filename, or update thesrcpath inindex.html - Use compressed images where possible to keep the page fast
- Edit the fetch URL in the
handleSubmit()function near the bottom ofindex.html - Point it to your local backend in development and your deployed backend in production
index.html- main content and interactive behaviorcss/globals.css- site-wide colors, typography, spacingcss/projects.css- project card styling if you split styles out laterbackend/portfolio_backend/settings.py- CORS, CSRF, and email settingsbackend/contact/views.py- contact form API logic
- Frontend can be deployed as a static site
- Backend must expose the
/api/contact/route and allow your frontend domain through CORS and CSRF settings - If the contact form stops working after deployment, check the backend environment variables first
This project now tracks page visits using the backend endpoint:
POST /api/contact/track-visit/
What gets stored:
- page path
- referrer
- browser user-agent
- IP address
- timestamp
How to view visits:
- Create an admin user in
portfolio-frontend/backend:python manage.py createsuperuser
- Run server:
python manage.py runserver
- Open
/admin/and viewVisit Eventsunder the Contact app.
Important: you can identify visit patterns (counts, sources, devices, rough location by IP), but you cannot reliably know the exact real-world identity of every visitor unless they authenticate or submit a form.
- This README matches the current repository layout.
- If you later split the page into reusable sections, you can reintroduce separate component documentation.