Newsletter
Join the Community
Subscribe to our newsletter for the latest news and updates
Zero-build developer portfolio powered by lit-html and vanilla ES modules, pulling live GitHub, Medium, and StackOverflow data from a single data file.
Portfolio Website is a zero-build, data-driven developer portfolio template that renders a single-page site from one JavaScript data file using vanilla ES modules and lit-html on GitHub Pages.
The Portfolio Website is a ready-to-deploy single-page portfolio template built with vanilla JavaScript ES modules and lit-html, with no framework, no bundler, and no build step. It takes all profile content from user-data/data.js — bio, skills, experience, education, adventures, contact, and footer — and produces a complete portfolio with sections for hero, about, experience, education, projects, blogs, and contact. The template runs entirely in the browser on GitHub Pages and was authored by Vinay Somawat, who hosts a live demo at vinaysomawat.github.io.
These features make the template a practical choice for developers who want a low-maintenance portfolio.
user-data/data.js to change every section; a JSON generator tool at pages/json-generator.html can produce that file from a form.src/constants/firebase.js, and the rest of the site is unaffected if you skip it.src/services/easterEgg.js.src/styles/tokens.css for colors, type scale, spacing, and motion, plus hand-written keyframes and vanilla JS micro-interactions (scroll reveal with IntersectionObserver, magnetic buttons, card tilt, cursor glow).index.html contains empty section placeholders, and each src/components/*.js module mounts its template into the matching section using the mount utility.The template suits developers and technical job seekers who want to maintain a portfolio by editing one data file.
src/constants/urls.js and component modules, though the JSON generator eases content edits.Here are concrete ways the template can be used once content and API identifiers are configured.
Because the entry module uses ES module imports and fetches external APIs, browsers block it over the file:// protocol; you must serve the project over HTTP (for example, python -m http.server 8000 or npx serve .). On page load, src/main.js mounts every static component into its placeholder, initializes services such as theme and scrollspy, then fetches Medium, GitHub, and gitconnected data in parallel and re-renders those sections once resolved. Deployment is just renaming the repo to <your-username>.github.io and pushing to master — GitHub Pages serves the root index.html automatically, with optional custom domains via a CNAME file.
The template offers a simple data-driven workflow but carries a few setup caveats.
file:// blocks ES modules and fetch; the visitor counter is the only section that needs external setup, and it won't function unless you configure your own Firebase project and Firestore rules.Answers to common questions about setup and behavior.
The repository is publicly available on GitHub and can be cloned and reused at no cost. The README invites contributions through pull requests and hosts a Buy Me a Coffee support link, but no license or paid tier is stated in the text.
Opening the file with a double-click uses the file:// protocol, which blocks ES module imports and fetch requests due to CORS in modern browsers. Start a local HTTP server in the project directory, such as python -m http.server 8000, and visit the printed localhost URL.
All section content is controlled by exported arrays in user-data/data.js — bio, skills, experience, education, adventures, contact, and footer. Experience and education entries use a documented object shape with title, duration, subtitle, details, tags, and a Font Awesome icon name. The tool at pages/json-generator.html can generate the correct structure from a form.
Create a Firebase project, enable Firestore and Google Analytics, register a web app, and copy the config into src/constants/firebase.js. Add a public read/write rule for the visitors collection. If you skip this, the counter shows "Loading..." forever, but no other section breaks.