Personal portfolio site built with vanilla HTML, CSS & JavaScript. No frameworks — runs as a static GitHub Pages site.
Live: sawraz-is.github.io
index.html Main markup (all sections)
palette-config.js Default palette config (edit via CLI)
set-palette.sh CLI to permanently change default palette
css/
base.css CSS variables, reset, typography, buttons
components.css Navbar, footer, modal, cursor, loader, terminal, palette
sections.css All section-specific styles
palettes.css 9 switchable color palettes (light + dark)
responsive.css Breakpoints: 480px, 768px, 1024px
js/
loader.js Terminal-style boot sequence (once per session)
cursor.js Custom dot + ring cursor with lerp trail
theme.js Light/dark toggle + palette system
nav.js Scroll shadow, progress bar, mobile drawer
animations.js Intersection Observer fade-up + counter animation
typewriter.js Cycling roles in hero section
tilt.js 3D perspective tilt on project cards (VanillaTilt)
magnetic.js Magnetic pull on hero CTA buttons
palette.js Command palette (Ctrl+K / Cmd+K)
scramble.js Text decode effect on section titles
modal.js Project detail modal on card click
contact.js Formspree form submission
terminal.js Hidden terminal easter egg (20+ commands)
confetti.js "hire" easter egg confetti burst
9 palettes available, switchable at runtime or permanently for deployment.
| ID | Name | Light | Dark |
|---|---|---|---|
ash-crimson |
Ash & Crimson | Typeset | Ink on void |
steel-blue |
Steel Blue | Blueprint | Deep focus |
amber-gold |
Amber Gold | Clean workshop | Night lab |
calibrated-paper |
Calibrated Paper | Calibrated paper | Deep substrate |
graphite-sage |
Graphite & Sage | Lab bench | Scope trace |
carbon-teal |
Carbon & Teal | Whiteboard | Logic analyzer |
parchment-ochre |
Parchment & Ochre | Ruled notebook | Amber lamp |
midnight-phosphor |
Midnight Phosphor | Clean forest | Retro green terminal |
obsidian-copper |
Obsidian & Copper | Warm stone | Oxidized metal |
Visitors can switch via:
- Ctrl+K / Cmd+K (command palette) → type "palette" → pick one
- Backtick (terminal) →
palette list/palette set carbon-teal
Their choice is saved in localStorage and persists across visits.
# List all palettes with current default
./set-palette.sh list
# Set a new default
./set-palette.sh steel-blue
# Reset to Ash & Crimson
./set-palette.sh reset
# Deploy the change
git add palette-config.js
git commit -m "chore: set default palette to steel-blue"
git pushPriority order: visitor's localStorage > palette-config.js > hardcoded fallback (ash-crimson)
Easter Eggs & Hidden Features
| Trigger | What happens |
|---|---|
Type hire anywhere |
Confetti burst animation |
Press ` (backtick) |
Opens a hidden terminal with 20+ commands |
| Press Ctrl+K / Cmd+K | VS Code-style command palette |
| View page source | ASCII art greeting for curious developers |
Navigation: whoami, ls projects, cat <project>, cat research, skills, experience, education
Actions: open github, open linkedin, ssh hire, theme, contact
Palette: palette, palette list, palette set <id>, palette reset
Fun: neofetch, fortune, date, echo <text>, history, pwd, sudo hire
System: clear, exit
- Navbar — Glassmorphism, hamburger mobile drawer, theme toggle
- Hero — Typewriter roles, floating dots, magnetic CTA buttons, shortcut hints
- About — Avatar + bio + PhD chip + 4 animated stat cards
- Education — BUET + Dhaka College cards
- Skills — 6 categories with staggered pop-in pill animations
- Experience — Vertical timeline with Iron Software (L1 → L2 promotion), OpenRefactory, Limbics AI
- Projects — 11 cards with 3D tilt, click-to-open detail modal
- Research — IEEE publication + undergraduate thesis
- Achievements — Affiliations + awards grid
- Contact — Direct links + Formspree contact form
- Footer — Social links + back-to-top
- Clone the repo
- Replace
YOUR_FORM_IDin the contact form (index.html) with your Formspree endpoint - Push to
mainbranch — GitHub Pages servesindex.htmlautomatically
- HTML5, CSS3, Vanilla JavaScript
- Google Fonts: Plus Jakarta Sans, Space Grotesk
- Font Awesome 6 (CDN)
- VanillaTilt.js (CDN)
- No build step, no bundler, no framework
- Light/dark mode with system preference detection + localStorage persistence
- 3px scroll progress bar
- Intersection Observer for fade-up, skill pop-in, stat counters, text scramble
- Custom cursor with lerp ring trail (desktop only)
- Magnetic buttons on hero CTAs
- 3D tilt + specular glare on project cards
- Terminal boot sequence loader (once per session, skippable)
- Section title decode/scramble animation
- Subtle noise grain overlay
Built by Shehabul Islam Sawraz