PL
Logo Lyavitski Pavel

Mam Pokoj

Mam Pokoj is a web platform for discovering and managing rental rooms. I built the entire project from scratch using Next.js, Drizzle ORM with SQL, UploadThing for image handling, and NextAuth for authentication and authorization. A significant focus of the project was building a fully functional API layer to support core features such as room listings, user management, and authentication flows.

Type
Portfolio
Stack
Next.js, TypeScript, Drizzle ORM, SQL, UploadThing, Styled-Components, Vercel
Portfolio project preview

Project Purpose and Objectives

The goal of Mam Pokoj was to build a full-stack app that helps people find and manage rental rooms in a clear and simple way. The project was designed to cover the entire lifecycle of a modern web application, including authentication, data management, media handling, accessibility considerations and a user-friendly interface.

A key objective was to implement a complete system where users can browse room listings, manage their own offers, and interact with the platform securely through authenticated sessions. The project also aimed to simulate real-world product requirements by focusing on scalability, maintainability, and clear separation between frontend and backend logic.

Next.js
TypeScript
Vercel

Technology Stack and Overview

The project was built using Next.js with TypeScript as a full-stack application combining frontend and backend in a single codebase. It uses Drizzle ORM with a simple schema of Ads and Images, and NextAuth for authentication, linking users to ads through user IDs for ownership and access control.

UploadThing is used for image uploads through its SDK, providing client-side upload workflows with server-side validation and secure handling of files. Vercel was chosen for this project because it provides seamless deployment and hosting for Next.js applications with minimal configuration.

  • Main page flow image
  • Create ad flow image
  • Dashboard flow image

Challenges and decision-making process

The main challenge was organizing a project of this size and working with server-side code. The size of the project showed me how important good code organization is for long-term maintenance. Implementing cursor pagination was a valuable experience that helped me learn how to efficiently load data and apply common data-handling patterns, even though I worked with a mock dataset.

I focused on keeping the codebase well-structured by using reusable components and styled-components for consistent styling across the application, along with server actions for handling data logic.

Portfolio project preview modal

What Was Learned

This is my first full-stack project, and I can talk a lot about how much I've learned. The most important things are that I’ve become more comfortable with React hooks, Next.js concepts and code structure. I also worked with the Motion library for animations, Radix UI for accessibility, improved my Git workflow, practiced database schema design, and integrated the UploadThing API for file uploads. Finishing a working version of this project gave me a better understanding of how all these pieces work together.