Loading repository data…
Loading repository data…
efkirmizi / repository
My personal portfolio — a fast, dependency-free single page built with vanilla HTML, CSS and ES-module JavaScript (no framework, no build step). Dark glassmorphism theme, data-driven rendering, and an interactive canvas "data constellation" background.
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
A fast, dependency-free portfolio for AI / Data Engineering roles. Dark theme, blue-purple accents, glassmorphism, scroll animations — built with plain HTML, CSS, and ES-module JavaScript. No build step, no framework, no npm.
PersonalWebsite/
├── index.html # Single page: all sections + SEO meta + JSON-LD
├── css/
│ ├── base.css # Design tokens (CSS variables), reset, typography,
│ │ # layout, scroll-reveal system, reduced-motion
│ ├── components.css # Reusable UI: nav, buttons, cards, tags, skill
│ │ # bars, filter chips, spotlight, form, etc.
│ └── sections.css # Per-section layout + responsive breakpoints
├── js/
│ ├── data.js # ★ ALL content lives here — edit this to customize
│ ├── main.js # Entry point: renders sections, wires up behavior
│ └── modules/
│ ├── render.js # data.js → DOM (includes the stroke icon set)
│ ├── brandicons.js # Inline brand logos (Simple Icons, CC0) for skills
│ ├── filter.js # Tag filter chips for the projects grid
│ ├── spotlight.js # Cursor-tracking glow on cards
│ ├── datafield.js # Site-wide constellation background (canvas)
│ ├── orbs.js # Spring physics for the hero's gradient orbs
│ ├── typed.js # Hero typing effect
│ ├── nav.js # Sticky nav, hamburger, active-link highlighting
│ └── scroll.js # Progress bar, reveal-on-scroll, back-to-top
├── assets/
│ ├── covers/ # Hand-drawn SVG "blueprint" cover art per project
│ ├── favicon.svg
│ └── resume.pdf # Placeholder — replace with your real resume
└── README.md
js/data.js: skills
(with proficiency levels), projects, experience, education, certifications,
publications, achievements, and the typed hero roles. Add an object to an
array and it renders automatically.index.html (kept static for SEO). Search for
your-username and replace with your GitHub/LinkedIn handles; update the
canonical URL and JSON-LD block in <head> too.assets/resume.pdf.mailto: fallback. For real
submissions, create a free Formspree form and paste
its endpoint into in .config.formEndpointjs/data.jsimage field at a hand-drawn
SVG illustration in assets/covers/ (a small "blueprint" of the system).
Swap any of them for a real screenshot (assets/covers/foo.webp works the
same way); remove the image field to fall back to the gradient + icon.icon: "pytorch") from js/modules/brandicons.js (Simple Icons path
data, CC0). Skills without a logo use a stroke glyph from render.js,
and anything unresolved falls back to the two-letter abbr badge.css/base.css. Change --accent / --accent-2
and the whole site follows.The site uses ES modules, so it needs to be served over HTTP (opening
index.html directly via file:// will block module imports).
Any static server works:
# Python (already on most machines)
python -m http.server 8000
# ...or Node
npx serve .
Then open http://localhost:8000.
<your-username>.github.io (or any repo).main branch.main / root. Done — no build config
needed since the site is fully static../.npx vercel in this folder../.After deploying, update the canonical, og:url, and JSON-LD URLs in
index.html with your real domain.
data.js + render.js preserves the main benefit React would
have offered (content as data, markup generated).data.js so growing them never means copy-pasting
markup.currentColor, and only the icons actually used
ship to the browser. Brand logos for skills are inlined the same way from
the CC0 Simple Icons set (js/modules/brandicons.js), with a few colors
lightened so they stay readable on the dark theme.tags already present in data.js (js/modules/filter.js); selecting one
re-renders the grid and replays the stagger animation.js/modules/datafield.js
draws a fixed full-viewport canvas behind every section: drifting points
with depth (deeper points are smaller, slower, and parallax less while
scrolling), linked into a faint web. Data packets periodically travel
along links and pulse the receiving node; the cursor acts as a query
vector whose k nearest points light up and link to it ranked by distance;
clicking sends a ripple through every node it reaches. Alt sections and
the footer use translucent backgrounds so the field stays visible,
dimmed, behind them. The hero's gradient orbs get their own spring
physics (js/modules/orbs.js). Both effects never initialize on touch
devices or under prefers-reduced-motion, and pause when the tab is
hidden.aria labels on icon-only links, and a prefers-reduced-motion
block that disables the typing effect, floating terminal, orbs, and reveals.
Content is never JS-gated: without JavaScript the page still shows all
static sections (reveal styles are scoped under a .js class).base.css makes it easy to add later if wanted.blog.html reusing base.css +
components.css; the nav is plain markup, just add a link.index.html,
a data array in data.js, and a render function in render.js (follow any
existing section as the pattern).data.js is the content schema. Point a headless CMS at it, or
fetch JSON at load and pass it to the same render functions.