How I Rebuilt IvyyDev.se: Faster, Better SEO, Easier to Maintain
I rebuilt ivyydev.se with React, Vite, TypeScript and Tailwind for speed, stronger SEO and a cleaner publishing workflow. Here’s the architecture and what I learned.

I recently rebuilt ivyydev.se from the ground up. The goal was simple: a faster site, SEO done right from the start, and a workflow where I can ship blog and portfolio updates without fighting the tooling. I focused on what actually moves the needle – speed, search visibility and maintainable code. Below is how the architecture and the fixes I made in the code work in practice.
Why rebuild?
The old setup worked for static pages, but every new article or portfolio piece took too long and SEO was scattered. I wanted a small, modern stack with no extra friction: React + Vite + TypeScript, Tailwind for styling and a consistent UI kit. No team – just me and the codebase.
Architecture in code
- React + Vite + TypeScript – fast dev loop and clear types. Vite
manualChunkssplits react, router, query and radix into separate chunks so the main bundle stays smaller and TBT (Total Blocking Time) goes down. - Tailwind – consistent design; CSS variables for theme and shared utilities like
section-blend-after-heroandcontent-visibility-auto. - A single
SEOHeadcomponent – each page passes title, description, canonical, hreflang, schema. The component sets document title, meta description/keywords, canonical link, hreflang links (including x-default), Open Graph, Twitter Cards and injects JSON-LD (e.g. BlogPosting and BreadcrumbList viagenerateArticleSchema/generateBreadcrumbSchema). All SEO in one place. - Blog and portfolio – same page layout: breadcrumb, h1, meta, article. Content lives in TSX files, versioned in Git.
- PageHero – inner pages (pilot project, locations, privacy, etc.) use the same hero as the home page: same background image (avif/webp), gradient, grid, orbs and
hero-fade-bottomfor a smooth transition into the next section.
More on the project in the portfolio entry.
Problems I solved (and how)
During the rebuild I hit a few concrete performance and UX issues and fixed them in the code:
- CLS (Cumulative Layout Shift): The home page sections Services, About and Testimonials are lazy-loaded after
requestIdleCallbackso first paint stays fast. When they mounted, they pushed the pilot section down and caused a big layout shift. Fix: a wrapper withmin-h-[1400px] sm:min-h-[1600px]around the lazy sections so space is reserved from first paint. The pilot section stays put and CLS drops. - FCP/LCP: The main stylesheet was blocking render. I added a Vite plugin (
cssAsyncLoad) that at build time switches the stylesheet link tomedia="print" onload="this.media='all'"plus a noscript fallback, so CSS doesn’t block first paint. - Main thread / TBT: Analytics and CookieBanner don’t mount immediately. In
App.tsxI wait forrequestIdleCallback(with a 2000 ms timeout, else 500 ms) before settingdeferredReadyand rendering them. Below-the-fold sections usecontent-visibility: autoso the browser can skip layout for off-screen content. - Consistent hero: Inner pages had their own gradient-hero blocks and looked different. I introduced
PageHerowith the same background, grid and glow as the home Hero, and addedsection-blend-after-heroin CSS so the first content section gets a smooth gradient transition instead of a hard edge.
SEO and performance in practice
SEO is handled entirely in SEOHead: canonical, hreflang (EN/SV + x-default), Open Graph, Twitter Cards and a single script type="application/ld+json" that updates on navigation. Blog posts use generateArticleSchema and generateBreadcrumbSchema so both the article and breadcrumbs get structured data. A clean sitemap and redirects for old URLs keep indexing straight. Builds are fast and Core Web Vitals (LCP, CLS, INP) stay in good shape – important for both users and ranking.
More technical depth: load balancing with Nginx and my services for web and automation.
Publishing flow
Articles and portfolio items are TypeScript files with the same component layout. Content sits next to code, versioned in Git, and I can iterate quickly. No CMS – just code and content in the same repo.
Hosting
The site runs on Vercel: previews per branch and straightforward production deploys. Builds are fast and I don’t have to manage a server myself.
What’s next
I’m considering a lightweight CMS bridge for drafts and scheduled posts, but I’m keeping the code-first approach. If you want to build something similar, with a fast site, good SEO, and clear structure, you can get in touch or apply for a free pilot project.

Jamie Bech
Senior Developer & Technical Specialist
Jamie is a senior developer with expertise in modern web technologies, infrastructure, and business automation. With over 8 years of experience, Jamie specializes in creating efficient solutions that help businesses scale and grow.
Related Articles
More guides on IT, web, and practical AI for small businesses and home users


