Commit graph

19 commits

Author SHA1 Message Date
46fc930281 fix: lift images out of mixed paragraphs to avoid <p><figure> nesting
Images render as <figure>, which isn't allowed inside <p>. The unwrap
plugin only handled paragraphs containing a single image, so a label
followed by images on the next lines (as on the Projects page) produced
invalid HTML and a hydration error. Split such paragraphs instead.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 14:29:51 +02:00
fd96e4b7fc feat(seo): sitemap, robots, canonical URLs, OG images and JSON-LD
- Add sitemap.ts and robots.ts
- pageMetadata() helper: consistent title, canonical URL, Open Graph,
  Twitter card and feed alternate on every page
- Generated OG images: a site card, and per post either the cover image
  or a branded title card (pre-rendered at build)
- BlogPosting JSON-LD on post pages
- Fail fast with a clear error when SITE_URL is missing

Content loading:
- Validate post frontmatter at build time and normalize dates to ISO
  (fixes invalid <time datetime> values)
- Add draft: true support (drafts only render in development)
- Cache markdown rendering so metadata and page share one render
- Replace the three copy-pasted about/projects/setup pages with a shared
  MarkdownPage component

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 14:22:40 +02:00
7550160a6c perf: image loading, smaller assets, server-rendered code blocks
- Only preload the post cover and latest-post image instead of every image
- Drop in-post image quality from 100 to 90 and add responsive sizes
- Downscale 2940px screenshots to 1800px; convert linkboard-old to WebP
  (3.1 MB -> 60 KB)
- Make CodeWrapper a server component; only CopyButton ships to the client
- Pin the Mermaid CDN script to an exact version for reproducible builds

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 14:17:18 +02:00
89a0566feb fix: tag/category routes, recently updated list, feed and no-js flash
- Slugify tag/category static params so pre-rendered pages match links;
  disable dynamic params and return a real 404 via notFound()
- Drop bogus generateStaticParams from the tags/categories index pages
- Add a styled not-found page
- Sort 'Recently updated' by last modification before slicing
- Atom feed: correct rel=self URL, use updated dates, valid content type
- Swap no-js -> js class in an inline head script before first paint
- Markdown links: only route internal paths through next/link and
  tolerate missing hrefs

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 14:15:57 +02:00
0b65e8b831 Projects subpage 2026-08-23 12:34:01 +02:00
729d3ae611 Better post navigation 2026-08-04 11:45:46 +02:00
a771755907 Fixed external link icon 2026-08-04 10:39:52 +02:00
1a5ea2f6c0 Fixed few SSG issues and cleanedup about me 2026-08-04 08:52:50 +02:00
ff553187db Added about page 2026-08-04 08:21:11 +02:00
9b5fee37e2 Added tag pages 2026-08-04 08:06:05 +02:00
HangerThem
6968646702 Fixed katex rendering on mobile 2026-08-03 20:41:16 +02:00
HangerThem
e3f9b53451 Fix puppeteer 2026-08-03 20:00:40 +02:00
HangerThem
9a2d25ed11 Fixing pathing of imports 2026-08-03 16:45:16 +02:00
HangerThem
5df72c7ac2 Restructure of components 2026-08-03 16:35:58 +02:00
HangerThem
b1de88f998 Fixed few formatting things; started on support for mobile/PWA 2026-08-03 15:11:10 +02:00
1a713fe1b6 Lil bit of cleanup 2026-08-03 12:33:39 +02:00
722ace7c74 Just a buch of stuff 2026-08-02 22:39:12 +02:00
231bdfc079 Forgor to publish a bit 2026-08-02 17:49:15 +02:00
66d0efa399 Basi implementation for blog style rendering 2026-07-27 16:39:20 +02:00