Building Full-Stack Web Apps with Next.js and TypeScript

By Shohei Komatsu (shokoma) · February 2026

Why Next.js + TypeScript?

For production web applications, the Next.js + TypeScript combination hits a sweet spot: React's component model for the UI, TypeScript's type safety for catching bugs at compile time, and Next.js's built-in routing, server rendering, and API routes for the full stack. It's what I use to build shokoma.com itself, as well as the frontend for Ace the Test.

This article covers the architecture patterns, SEO setup, internationalization, and deployment workflow I use across my projects.

Project Architecture

I use the App Router (introduced in Next.js 13) rather than the Pages Router. The key architectural decisions:

SEO from Day One

Next.js provides powerful built-in SEO primitives. My standard setup for every project:

Internationalization (i18n)

shokoma.com serves both Japanese and English audiences on the same URL structure. The i18n approach:

Styling with Tailwind CSS

Tailwind CSS is the styling layer across all my Next.js projects. The utility-first approach eliminates the CSS naming problem and makes responsive design straightforward. Custom design tokens (colors, spacing, typography) are defined in tailwind.config.js, keeping the visual language consistent across pages. For complex interactive components, I use Tailwind classes directly rather than a component library, keeping the dependency footprint minimal.

Deployment on AWS Amplify

The site runs on AWS Amplify, which provides:

The amplify.yml build spec defines the build steps, and next.config.js configures the output mode for Amplify compatibility.

Takeaways

Explore Further

Last updated: February 2026