Téo Casanova

Kasa.

Next.js rental application to browse and publish housing listings, keep favorites, talk to owners and manage an account, through a responsive interface connected to an Express API. A GitHub Actions CI runs lint, tests and builds on every push.

Full-StackNext.jsMarketplace
nexttypescriptreactnodeauthvitestvercel

Context

Project built as part of the OpenClassrooms program, then taken further than its original scope. The goal was to build a complete rental application from mockups, integrating an existing Express API before adapting it to the feature and deployment needs.

Stack

Next.js App RouterTypeScriptReactTailwind CSSExpressSQLiteJWTVitest / RTLVercelRailwayGitHub Actions

Technical choices

  • Next.js App Router with Server Components for server-side rendering, and client components only where interaction is required
  • Server Actions to centralize sensitive writes without exposing the Express API directly to the browser
  • Express API with JWT authentication and client, owner and admin roles
  • SQLite to persist accounts, properties, messages and business data
  • Upload handling for property photos and user avatars
  • Context API and localStorage to manage favorites without adding backend complexity
  • Vitest and React Testing Library to cover critical behaviors and components
  • Vercel for the Next.js frontend and Railway with a persistent volume for the backend, SQLite and uploads

Features

JWT authenticationListing creationMessagingFavoritesProfile managementImage uploadsSEO & accessibilityResponsive design

What this project demonstrates

  • Building a full-stack Next.js application connected to an Express API
  • Handling authentication, roles and protected routes
  • Designing Server Actions to secure exchanges with the backend
  • Implementing user-to-user messaging
  • Complete handling of forms, validation and file uploads
  • Building accessible, responsive interfaces from provided mockups
  • Setting up automated tests on critical flows and logic
  • Deploying a separate frontend and backend architecture with persistent storage

Current limitations

  • Backend initially provided, then extended for the needs of the project and its deployment
  • SQLite suited to the demo and scope of this project rather than to heavy production load
  • Uploads go through Server Actions and remain subject to Vercel’s 4.5 MB request body limit