Minimalist, high-performance blog built with Next.js 16, Tailwind CSS v4, and TypeScript. Optimized for SEO, Core Web Vitals, and conversions.
Live URL: https://blog.klyx.fr (after deployment)
Main Site: https://klyx.fr
Stack: Next.js 16 (App Router) β’ Tailwind v4 β’ TypeScript β’ MDX β’ GA4
sudo chown -R $(whoami):staff ~/.npmnpm install# Copy and edit environment variables
cp .env.example .env.local
# Add your GA4 tracking ID
# NEXT_PUBLIC_GA_ID=G-XXXXXXXXXX# Create a new MDX file
touch content/posts/mon-premier-article.mdxSee CONTENT_GUIDE.md for the complete frontmatter template and best practices.
npm run dev
# Visit http://localhost:3000# Test production build
npm run build
npm run start
# Deploy to Vercel (recommended)
npm i -g vercel
vercelSee DEPLOYMENT.md for complete deployment instructions.
β
Dynamic meta tags (title, description, OG, Twitter)
β
JSON-LD structured data (Article, WebSite, LocalBusiness)
β
Sitemap + RSS feed generation
β
robots.txt configuration
β
Canonical URLs
β
Semantic HTML
β
Next.js 16 - Latest features & optimizations
β
Static Site Generation (SSG) - Pre-rendered pages
β
Image Optimization - Automatic WebP/AVIF
β
Code Splitting - Minimal JavaScript
β
Font Optimization - Geist Sans & Mono
β
Target: Lighthouse 90+ across all metrics
β
WCAG AA compliant
β
Skip-to-content link
β
Semantic HTML5
β
Keyboard navigation
β
Reduced motion support
β
High contrast (black & white + #6b2fcd accent)
β
Google Analytics 4 integration
β
Event tracking (CTAs, shares, outbound links)
β
Calendly CTAs (header, footer, inline)
β
Internal linking to klyx.fr
β
Social share buttons
Get professional, unique images for all articles:
# 1. Get FREE API key: https://unsplash.com/developers
# 2. Add to .env.local: UNSPLASH_ACCESS_KEY=your_key
# 3. Download all images:
npm run get-images
# β
All 8 posts get unique, relevant cover images!See UNSPLASH_SETUP.md for complete guide.
blog-klyx/
βββ app/ # Next.js App Router
β βββ layout.tsx # Root layout (GA4, schemas, Header, Footer)
β βββ page.tsx # Homepage (hero + featured posts)
β βββ posts/[slug]/ # Dynamic post pages (SSG)
β βββ tags/ # Tag filtering & listing
β βββ about/ # About Klyx page
β βββ contact/ # Contact page (Calendly + email)
β βββ sitemap.ts # Dynamic sitemap generator
β βββ rss.xml/ # RSS feed route
β βββ robots.txt/ # robots.txt route
β
βββ components/ # React components
β βββ SEO.tsx # Meta tags & OG management
β βββ Header.tsx # Navigation + Calendly CTA
β βββ Footer.tsx # Footer with klyx.fr links
β βββ CalendlyCTA.tsx # CTA component (primary/inline)
β βββ PostCard.tsx # Post preview card
β βββ MDXComponents.tsx # Custom MDX component mapping
β βββ ShareButtons.tsx # Social sharing
β βββ TagBadge.tsx # Tag pills
β βββ AuthorCard.tsx # Author info
β
βββ lib/ # Utilities & helpers
β βββ types.ts # TypeScript types
β βββ utils.ts # Formatting, slugify, reading time
β βββ json-ld.ts # Schema.org generators
β βββ analytics.ts # GA4 event tracking
β βββ posts.ts # Post fetching & filtering
β
βββ content/ # MDX blog posts
β βββ posts/
β βββ *.mdx # Your blog articles
β
βββ public/ # Static assets
β βββ assets/
β βββ posts/ # Post images (organized by slug)
β βββ og-default.jpg # Default OG image
β
βββ .env.local # Environment variables (gitignored)
βββ .env.example # Environment template
βββ CONTENT_GUIDE.md # How to create blog posts
βββ DEPLOYMENT.md # Deployment instructions
βββ IMPLEMENTATION_STATUS.md # What's done, what's next
Create content/posts/my-post.mdx:
---
title: "Your Post Title (50-60 chars)"
date: "2025-11-01"
slug: "your-post-slug"
description: "Meta description 150-160 characters"
keywords: ["keyword1", "keyword2", "Klyx"]
tags: ["tag1", "tag2"]
coverImage: "/assets/posts/your-post-slug/cover.jpg"
author:
name: "Klyx Studio"
email: "[email protected]"
---
## Introduction
Your content here...
## Main Section
More content...
## FAQ
**Question?**
Answer...See CONTENT_GUIDE.md for:
- Complete frontmatter reference
- SEO best practices
- Internal linking strategy
- Image optimization
- Publishing checklist
--color-primary: #6b2fcd /* Accent color */
--color-black: #000000 /* Text & borders */
--color-white: #ffffff /* Backgrounds */- Base font: 18px (Geist Sans)
- H1: 3-4rem, bold (used for titles)
- H2: 2.25-3rem, bold (section headings)
- H3: 1.875-2.25rem, semibold (subsections)
- Responsive: Uses clamp() for fluid scaling
.btn-primary- Primary CTA (purple background).btn-secondary- Secondary CTA (outlined).card- Post cards with hover effect.prose- MDX content styling.container-custom- Max-width container (80rem)
Required in .env.local:
NEXT_PUBLIC_GA_ID=G-XXXXXXXXXX
NEXT_PUBLIC_SITE_URL=https://blog.klyx.fr
NEXT_PUBLIC_CALENDLY_URL=https://calendly.com/klyx-studio/call-solution-site-internet
[email protected]
NEXT_PUBLIC_MAIN_SITE_URL=https://klyx.frStrict mode enabled in tsconfig.json.
CSS-based configuration in app/globals.css using @theme directive.
# Development
npm run dev # Start dev server (localhost:3000)
# Production
npm run build # Build for production
npm run start # Start production server
# Linting
npm run lint # Run ESLint- Dynamic title tags (50-60 chars)
- Meta descriptions (150-160 chars)
- Keyword optimization
- Structured heading hierarchy (H1 β H2 β H3)
- Alt text on images
- Internal linking strategy
- Sitemap.xml (auto-generated)
- RSS feed
- robots.txt
- Canonical URLs
- Mobile-first responsive design
- Fast Core Web Vitals
- Article schema for posts
- WebSite schema for blog
- LocalBusiness schema for Klyx
- Breadcrumb navigation
- FAQ schema (when applicable)
- Open Graph tags (Facebook, LinkedIn)
- Twitter Card tags
- Optimized OG images (1200x630)
Every blog post includes:
- 2+ links to klyx.fr (services, portfolio, main site)
- 1 contextual Calendly CTA (inline in content)
- Persistent CTAs (header + footer)
- Share buttons (Twitter, LinkedIn, copy link)
- Related posts (tag-based recommendations)
# Install Vercel CLI
npm i -g vercel
# Deploy
vercel
# Deploy to production
vercel --prodAdd CNAME record in your registrar:
- Name: blog
- Value: cname.vercel-dns.com
See DEPLOYMENT.md for:
- Complete Vercel setup
- Custom domain configuration
- SSL certificate setup
- Google Search Console
- Google Analytics 4
- Troubleshooting
- Deploy to production
- Configure custom domain (blog.klyx.fr)
- Verify SSL certificate
- Submit sitemap to Google Search Console
- Test GA4 tracking
- Verify all Calendly CTAs work
- Test on mobile devices
- Publish 6-10 initial blog posts
- Monitor GSC for indexing errors
- Run Lighthouse audit (target 90+)
- Check accessibility with axe DevTools
- Set up weekly backups
- Publish 8-12 new posts
- Review GA4 traffic patterns
- Optimize top-performing posts
- Build internal linking between posts
- Monitor conversion rates (Calendly clicks)
README.md(this file) - Project overviewCONTENT_GUIDE.md- How to create blog postsDEPLOYMENT.md- Deployment & DNS setupIMPLEMENTATION_STATUS.md- What's completed/pending
# Clear cache
rm -rf .next
rm -rf node_modules
npm install
npm run build- Check MDX files are in
content/posts/ - Verify frontmatter is valid YAML
- Ensure
slugmatches filename (without .mdx) - Check for syntax errors in MDX content
- Images must be in
public/directory - Paths must start with
/(e.g.,/assets/posts/...) - Check image file extensions match frontmatter
- Verify
NEXT_PUBLIC_GA_IDis set - Check browser console for errors
- Disable ad blockers for testing
- Allow 24-48 hours for data to appear in GA4
- Email: [email protected]
- Main Site: https://klyx.fr
- Next.js Docs: https://nextjs.org/docs
- Tailwind Docs: https://tailwindcss.com/docs
Private project for Klyx Studio. All rights reserved.
- Create Content: Use
CONTENT_GUIDE.mdto write your first 6 posts - Deploy: Follow
DEPLOYMENT.mdfor Vercel deployment - Monitor: Set up Google Search Console and GA4
- Optimize: Run Lighthouse and improve scores
- Grow: Publish consistently, build backlinks, monitor analytics
Ready to launch your blog? Start with npm install and follow this README!