Vaibhav Attre.boot

retro-futurist workstation init

[ 0.000] POST: workstation bus scan complete
[ 0.013] memctl: 64 GiB addressable, ECC nominal
[ 0.029] sched: run queue initialized
[ 0.041] fs: mounting /home/vaibhav
[ 0.068] net: link up on loopback and uplink0
[ 0.091] ui: terminal compositor ready
[ 0.112] session: entering interactive workspace
Loading command bus, filesystem tree, and process monitor.
Vaibhav Attre.ws
/projects/unifiedstay
shell bus
vaibhav@ws:/projects/unifiedstay$ session
interactive workstation online
type `help` or press `/` to focus the shell
tab completes top match
/projects/unifiedstay

UnifiedStay

Monorepo property-operations platform that unifies rental calendars, turnover workflows, and property-level financial tracking.

UnifiedStay dashboard
full stack

UnifiedStay

UnifiedStay is a full-stack short-term rental operations platform built as a TypeScript monorepo. It brings together workflows that are usually split across Airbnb, Vrbo, and manual back-office tools into one system: property setup, reservation management, calendar sync, conflict detection, turnover task generation, and financial reporting. The stack includes a React + Vite frontend, Fastify API, shared schema/types package, and a Prisma-backed PostgreSQL database. Channel mappings store iCal feeds and sync metadata, while a background job refreshes reservation data every 30 minutes. On top of the calendar layer, the platform supports availability blocks, cleaning workflows, payout imports, and property-level P&L tracking, making it a practical multi-domain operations system rather than a simple CRUD app.

date: 2025 - 2026status: active
overview

Short-term rental operations are usually split across listing channels, calendar feeds, spreadsheets, cleaner coordination, and financial exports. That fragmentation makes it harder to maintain booking correctness, coordinate turnovers, and understand property-level performance from a single source of truth.

implementation
Built the system as a pnpm + Turborepo workspace with a dedicated React web app, Fastify API service, Prisma database package, and shared TypeScript contracts.
Implemented property, unit, and channel-mapping models so each rental can be connected to external platforms through iCal URLs and normalized into a common reservation view.
Developed calendar services that load reservations and availability blocks over arbitrary date windows, convert them into unified calendar events, and mark overlapping records through conflict detection logic.
Added a background sync scheduler using node-cron so mapped channels are refreshed automatically every 30 minutes, with support for initial sync on startup and persisted sync error tracking.
Connected reservation data to operational workflows by generating turnover cleaning tasks from upcoming checkouts, using configurable property buffers to determine due times.
Implemented finance flows for expenses, revenues, summaries, payout parsing, and property-level P&L calculations across configurable date ranges.
Exposed structured API routes for authentication, properties, calendar events, reservations, blocks, conflicts, tasks, finance summaries, and reporting workflows.
challenges
External rental channels do not present data in a uniform application model, so the system has to normalize imported calendar information into consistent reservation records and conflict checks.
Calendar correctness is operationally critical because overlapping bookings and stale channel state directly affect revenue and guest experience.
Turnover automation cannot remain isolated from calendar logic; checkout timing, reservation state, and property-specific cleaning buffers all influence task generation.
Financial visibility is more useful when tied to the same property graph as reservations and operational tasks, which requires keeping multiple domains aligned without duplicating state.
A monorepo architecture improves shared typing and reuse, but it also requires careful separation of concerns so frontend, backend, and database code remain modular rather than tightly coupled.
outcomes
UnifiedStay demonstrates a product-shaped full-stack system with meaningful operational depth rather than a narrow demo feature.
The repository shows end-to-end application design across frontend UX, backend modules, scheduled jobs, relational data modeling, and deployment configuration.
The project establishes a strong example of shared typed contracts and multi-domain workflow integration across calendar, operations, and finance surfaces.
The codebase provides a practical foundation for extending channel coverage, richer payout ingestion, messaging support, and broader property-management automation.
Learned how to use Docker to architect databases and background workers in a way that supports local development and testing of complex backend features like scheduled jobs and database interactions.
architecture notes
The codebase is organized as a Turborepo monorepo with separate web and API applications plus shared database and type/schema packages.
The frontend uses React, Vite, Tailwind CSS, and modular page-level views for dashboard, calendar, properties, tasks, finance, and authentication flows.
The backend is structured around Fastify feature modules for auth, property management, calendar operations, dashboard summaries, tasks, and finance.
Prisma centralizes persistence through a PostgreSQL schema that models users, properties, units, channel mappings, reservations, availability blocks, tasks, expenses, and revenues.
Channel integrations are normalized through iCal mappings, capability metadata, and stored sync state such as last successful sync timestamp and last sync error.
Deployment is separated by concern, with the frontend configured for Vercel, the backend for Render, and Postgres hosted through Neon.
stack
TypeScriptReactViteFastifyPrismaPostgreSQLTurborepopnpmTailwind CSSDocker
highlights
Unified multi-property calendar layer with iCal-based channel ingestion and booking conflict detection.
Automatic recurring sync infrastructure that refreshes mapped channel calendars every 30 minutes and records sync status per connection.
Turnover workflow generation that creates cleaning tasks from upcoming checkouts using property-specific timing rules.
Integrated finance tooling for expenses, revenue records, payout import flows, and property-level profit-and-loss reporting.
Shared schema and type packages that keep contracts aligned across the React frontend, Fastify backend, and Prisma data layer.
metrics
sync cadence
30 min
workspace apps
2
core data models
9
media
UnifiedStay dashboard view
A Turborepo workspace split across web, API, database, and shared packages.