Umbral Properties
Brand and data are fictional, to protect the client.
The problem
The agency relied on listing portals and messages to show its properties, without a website of its own it could update unaided.
What was built
A website with search by neighborhood, operation, type, rooms and price, a page per property with photos and WhatsApp inquiries, valuation requests, and an admin panel to add and publish properties.
Technical details
A React and TypeScript SPA (Vite, Tailwind, shadcn/ui) with its own REST API in Express, Prisma and PostgreSQL, both on Vercel. In the admin panel, properties are saved as drafts with lenient validation, and checked against a strict Zod schema when published.
Photos are uploaded straight to Cloudinary with a signature generated by the backend. Vercel’s serverless functions accept up to 4.5 MB per request, so the backend only receives the URLs. When a property is edited, the images left unused are deleted. Prisma goes through the pooler in transaction mode and uses a direct connection only for schema changes: without that, the serverless functions failed with “prepared statement does not exist”. The panel adds sales statistics by month, type and neighborhood, in pesos and dollars separately.
Technologies
- React
- TypeScript
- Tailwind CSS
- Express
- Prisma
- PostgreSQL
