
Full-Stack Application · Personal Project
VSTV Agent — Real Estate Platform & Operations Console
- Next.js 14
- React 18
- TypeScript
- Tailwind CSS
- Drizzle ORM
- Neon PostgreSQL
- Spring Boot
- Telegram
Project Summary
Problem
Real-estate listings, staff operations, and Telegram updates need one trustworthy workflow. VSTV Agent brings the public property experience and the private inventory console together so agents can manage verified units, publish safe summaries, and help renters find options in Phnom Penh.
Approach
VSTV Agent is a full-stack real-estate application for VSTV Agent (Cambodia) Co., Ltd. The public site presents rental properties, services, agents, contact paths, and location information; the protected admin console manages staff, units, availability, imports, inquiries, and operational settings.
What I Built
- Public property discovery and agent/contact flows
- Protected staff workspace with role-aware access
- Searchable unit inventory and availability workflows
- Two-step CSV preview and confirmed import
Implementation
The application uses Next.js 14 App Router, React 18, TypeScript, Tailwind CSS, TanStack Query, Drizzle ORM, and Neon PostgreSQL. Browser code talks to typed API clients; server-only route handlers and services own database access. The migration keeps Spring Boot as the current backend for authentication and staff domains while Next.js serves the unit inventory and import domains. Telegram delivery is scheduled through the application workflow.
Architecture Flow
Backend Evidence
Core data
Key endpoints
- GET
/api/v1/unitsSearchable, paginated private unit inventory
- POST
/api/v1/units/import/previewParse and classify a CSV without persisting rows
- POST
/api/v1/units/importPersist confirmed unit import rows
- PATCH
/api/v1/units/{id}/availabilityChange a unit's availability state
Engineering Decisions
Challenge
Moving backend ownership incrementally without breaking a live public site
Decision
A stable /api/v1 boundary lets Spring Boot and Next.js migrate domain by domain
Challenge
Keeping private owner contacts and internal notes out of public and Telegram payloads
Decision
Server-side mapping and public-safe formatting omit sensitive fields before delivery
Challenge
Making imports and scheduled delivery safe to retry
Decision
Preview/confirm imports and durable delivery claims make operational workflows recoverable
Takeaways
- Incremental backend migration works best when the client contract remains stable and ownership is documented per domain
- Operational safety is part of product design: preview, permissions, redaction, retries, and audit records matter as much as CRUD screens
H-Phsar — B2B Marketplace API