Thanakrit
Thanyawatsakul.
Full-Stack Developer · Next.js / TypeScript
I build production web apps end-to-end, with AI-augmented workflows and a focus on architecture and code review. From hotel software to bilingual B2B sites, I aim for solid performance, test coverage, code quality, and CI before shipping.
Things I've shipped.
Personal work, freelance, and company projects. Some solo, some with a team.
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.
functionbuildColumns(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 }, () => []));
}
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.
export async functionGET(): Promise<Response> {
const checks = awaitrunHealthChecks();
return Response.json({
status: checks.every(c => c.ok) ? 'healthy' : 'degraded',
uptime: process.uptime(), checks,
});
}
| # | Project | Type | Link |
|---|---|---|---|
| 003 | PURA PMSHotel 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 16NestJS 11PostgreSQLTurborepoPrismaTanStack Query | Personal · 2/7 phases | Demo |
| 004 | S.K. Charoensup EngineeringB2B company website for an electrical engineering firm. Bilingual EN/TH, Payload CMS, CI/CD. I handled frontend, CMS setup, testing, and deployment. Next.js 15Payload CMSnext-intlSonarQubeVitest $ npm run build Compiling pages (EN/TH)... ✓ Build complete | Freelance · Team | Private |
| 005 | Sprouting Tech MarketingOne-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 15Framer MotionLenisSupabaseResendZod | Company · Solo | Live |
| 006 | ThaiParts InfinityB2B 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 15Framer MotionEmbla CarouselReact EmailTailwind v4 | Company · Contributor | Live |
| 007 | Sprouting AcademyOnline 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 15SonarQubeDockernext-intlHuskyGitHub Actions | Company · Frontend Lead | Live |
| — | Lighthouse ScoreEvery project I ship targets 100/100 across all four categories. — Performance — Accessibility — Best Practices — SEO | Interactive |
What I work with.
TypeScript across the stack. Tests and CI validate changes before shipping, including AI-generated logic.
Recent work, in order.
Highlights from the last couple of months across personal and professional projects.
Extracted SquareFilterButton into its own file, hit 100% coverage, and cleared all quality gates before committing.
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.
Cleared every ESLint error and warning in the skcharoensup project. pnpm lint exits clean.
Rewrote sitemap.ts and the article page to pass cognitive complexity checks and reach 100% test coverage.
Patched 1 critical, 25 high, and 14 moderate vulnerabilities in the Next.js + Payload CMS stack through targeted upgrades and package overrides.
Injected DATABASE_URI and PAYLOAD_SECRET as GitHub Actions secrets so static generation could run in CI. Removed the force-dynamic workarounds.
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