Index — 001
Chiang Mai, TH · 2026
Open to work

Thanakrit
Thanyawatsakul.

Full-Stack Developer · Next.js / TypeScript

Thanakrit Thanyawatsakul

I build production web apps end-to-end. From hotel software to bilingual B2B sites, I focus on performance, test coverage, and clean CI before anything ships.

Projects
Lighthouse
Vulns Patched
Projects

Things I've shipped.

Personal work, freelance, and company projects. Some solo, some with a team.

Personal
Professional
001 · Personal · Live on Vercel
Image Gallery SPA

A gallery app built to sharpen React patterns. Stable masonry with zero layout shift, full-screen lightbox, keyboard nav, infinite scroll, and keyword filtering. Vitest at 100%, Playwright E2E, SonarQube clean.

Next.js 16 Framer Motion Tailwind v4 100% coverage Playwright E2E Prisma Docker
Live site
// stable masonry: shortest column gets the next item
function buildColumns(items: Photo[], cols: number) {
  const heights = Array(cols).fill(0);
  return items.reduce((acc, item) => {
    const col = heights.indexOf(Math.min(...heights));
    acc[col].push(item); heights[col] += item.height / item.width;
    return acc;
  }, Array.from({ length: cols }, () => []));
}
002 · Company Platform · Solo
Sprouting Tech Enterprise

Company platform built solo. Multi-locale EN/TH routing, PWA with service worker, rate limiting, structured logging, security headers (CSP, HSTS, XSS), GitHub Actions CI/CD, and Docker multi-stage builds.

Next.js 15 Docker GitHub Actions Cypress E2E Supabase PWA i18n
Live site
// GET /api/health
export async function GET(): Promise<Response> {
  const checks = await runHealthChecks();
  return Response.json({
    status: checks.every(c => c.ok) ? 'healthy' : 'degraded',
    uptime: process.uptime(), checks,
  });
}
# Project Type Link
003 PURA PMS Hotel property management system. Monorepo with Next.js frontend and NestJS API. Auth, rooms, guests, and reservations done. Runs on mock data for demo.
Next.js 16 NestJS 11 PostgreSQL Turborepo Prisma TanStack Query
Personal · 2/7 phases
004 S.K. Charoensup Engineering B2B company website for an electrical engineering firm. Bilingual EN/TH, Payload CMS, CI/CD. I handled frontend, CMS setup, testing, and deployment.
Next.js 15 Payload CMS next-intl SonarQube Vitest
$ npm run build
Compiling pages (EN/TH)...
✓ Build complete
Freelance · Team
005 Sprouting Tech Marketing One-page company site built solo. Token-driven dark design system, Lenis smooth scroll, Framer Motion, bilingual TH/EN, contact form via Supabase + Resend.
Next.js 15 Framer Motion Lenis Supabase Resend Zod
Company · Solo
006 ThaiParts Infinity B2B industrial parts site. Team of four; 26 of 64 commits. Built carousel sections, React Email templates, contact form via Resend. ESLint/Prettier config and code review.
Next.js 15 Framer Motion Embla Carousel React Email Tailwind v4
Company · Contributor
007 Sprouting Academy Online learning platform. Top contributor on the frontend (98 of 394 commits), team of nine. Page architecture, CMS integration, loading skeletons, SEO metadata, SonarQube quality gates.
Next.js 15 SonarQube Docker next-intl Husky GitHub Actions
Company · Frontend Lead
Lighthouse Score Every project I ship targets 100/100 across all four categories.
Performance
Accessibility
Best Practices
SEO
Interactive
Stack

What I work with.

Mostly TypeScript across the stack. Tests and CI solid before shipping.

Frontend
Next.js / React95%
TypeScript92%
Tailwind / CSS90%
Framer Motion82%
Testing & Quality
Vitest + RTL93%
Playwright / Cypress85%
SonarQube80%
ESLint / Prettier95%
Backend & DevOps
NestJS / Node.js78%
PostgreSQL / Prisma82%
Docker80%
GitHub Actions88%
Timeline

Recent work, in order.

Highlights from the last couple of months across personal and professional projects.

Mar 2026
Gallery
Gallery feature polished and commit-ready

Extracted SquareFilterButton into its own file, hit 100% coverage, and cleared all quality gates before committing.

Feb 2026
Gallery
Infinite scroll fast-scroll bug squashed

Found and fixed a pagination failure caused by fast scrolling. Rewrote the hook using threshold cascading so it never misses a sentinel. Added mock-driven tests to cover the edge case.

Feb 2026
S.K. Charoensup
Zero lint warnings across the workspace

Cleared every ESLint error and warning in the skcharoensup project. pnpm lint exits clean.

Feb 2026
Academy
Sitemap and article page refactor

Rewrote sitemap.ts and the article page to pass cognitive complexity checks and reach 100% test coverage.

Feb 2026
S.K. Charoensup
40 security vulnerabilities cleared

Patched 1 critical, 25 high, and 14 moderate vulnerabilities in the Next.js + Payload CMS stack through targeted upgrades and package overrides.

Jan 2026
S.K. Charoensup
CI database secrets and SSG unlocked

Injected DATABASE_URI and PAYLOAD_SECRET as GitHub Actions secrets so static generation could run in CI. Removed the force-dynamic workarounds.

Contact

Get in touch.

Open to full-time roles and freelance. Based in Chiang Mai — fully remote-ready.

Chiang Mai, Thailand · Available now · Responds within 24 h