How this site is built
Stack
Next.js 16 with the App Router, React 19 and TypeScript, styled with Tailwind CSS 4. The projects archive uses TanStack Table with match-sorter for fuzzy search, the contact form uses TanStack Form with a Zod schema shared by the browser and the server, and next-intl provides the English and Slovak versions.
Architecture
Every page is generated at build time in both languages. Content lives in typed TypeScript modules, and automated checks verify slugs, images, links, dates and translations before each build.
Pages are React Server Components; JavaScript is sent only for the interactive parts, such as the navigation menus, the projects archive, the image gallery and the contact form. Each page has its own generated link preview image and structured data for search engines.
Design
Colours are design tokens in CSS variables. Light and dark mode each offer several themes, applied before the first paint so the page never flashes the wrong colours.
Pages and project images move between routes with view transitions, and content rises into place as you scroll, driven by CSS. On larger screens a light particle field drawn with WebGL2 reacts to the pointer; it pauses in hidden tabs and stays off when reduced motion is requested.
Testing and CI
GitHub Actions runs Biome, the TypeScript compiler, Vitest and Playwright on every push. The end-to-end tests cover navigation, search, forms and themes on desktop and mobile, and run axe accessibility checks against WCAG 2.2 AA.
Lighthouse CI keeps performance, accessibility, best practices and SEO within fixed budgets, including a limit on the JavaScript each page ships. A weekly job checks every external link, and Dependabot keeps dependencies up to date.
Hosting and privacy
The site is hosted on Vercel and deployed automatically from the main branch. Vercel Web Analytics and Speed Insights measure visits and real loading times without cookies, and your theme choice is stored only in your browser.
Accessibility
This site aims to meet WCAG 2.2 at level AA. It works with a keyboard and screen readers, keeps focus visible, respects reduced-motion settings, and every theme meets the AA contrast requirements.
If anything is difficult to use, please let me know.