Personal blog and portfolio of Ege Vusal Chelebi (@woosal1337).
A dark, editorial personal site — writing, projects, and a reading shelf — built with Next.js 14 (App Router), MDX, Tailwind CSS, and Biome, deployed on Vercel.
- Editorial dark theme: Geist Sans for reading, Geist Mono for code, hairline borders, one motion curve.
- MDX blog with a left-rail table of contents, callouts, and per-post chrome.
- Post banners generated from the title — a deterministic contour mark (
lib/contour.ts), no manual cover images. - Liquid-glass circular controls and frosted-glass tags.
- A single contour identity mark drives the logo and favicons.
- Next.js 14 (App Router), React 18, TypeScript
- MDX posts colocated under
app/(website)/blog/(post)/[slug]/page.mdx - Tailwind CSS with a token layer in
app/globals.css(dark, editorial) - Reusable design-system primitives in
components/ds/, domain blocks incomponents/blocks/ - Biome for linting and formatting
bun install
bun devRequires Node >= 20 and Bun. No environment variables required.
bun dev— dev serverbun run build— production buildbun run check— Biome lint and format with auto-fix
The My Tesla, TRDS, and ade card marks follow their project identities. The Knap Templates mark is an original folded-page design. The index card uses the square project icon.
The animated line studies in components/blocks/shape-study.tsx use original geometry inspired by Book of Shapes. Each page has its own composition. The 48-second loop repeats automatically without controls. Reduced motion shows a static view. The renderer groups strokes, scales curve detail to the width, and draws at 20 frames per second. The background grain uses a static texture. Run bun tools/check-shape-studies.ts to check loop continuity and canvas bounds.
The earlier ASCII components in components/blocks/ascii/ remain from cobanov/soft-club-ui (MIT). The table-of-contents marker geometry follows ncdai's LineNav.
Code is MIT. Blog content and images are all rights reserved. See LICENSE.