
Rentra
A booking platform with owner operations, availability controls, and payment processing.
- Status
- In progress
- Platforms
- Web, Backend
Key Challenges
- Preventing overlapping reservations when multiple requests compete for the same availability.
- Reconciling asynchronous payment events safely when providers retry delivery or workers restart.
- Keeping per-request Next.js state isolated while preserving cookies, redirects, and revalidation behavior.
Key Learnings
- Using database constraints and transaction locks as the final protection for booking availability.
- Designing deduplicated webhook processing and leased jobs for recoverable background work.
- Separating server-rendered state initialization from long-lived client state.
Product walkthrough
Actual development screenshots. Select an image to view the full capture in a new tab.
Overview
Rentra is my personal booking platform connecting booking journeys with owner operations, availability management, and administrative workflows. I built its Next.js frontend, Express backend, and PostgreSQL data layer, including booking controls and payment-processing infrastructure.
Key Features
Booking and Availability
Connect booking requests to inventory and availability checks, protecting reservations against conflicting date ranges.
Owner Workspace
Provide owner dashboards, availability calendar interactions, and operational guidance, including narrow-screen workflows.
Scoped Operations
Separate administrator, client, and staff capabilities so booking and operational actions use the appropriate permissions.
Payment Event Processing
Verify raw-body webhook signatures and deduplicate events before applying payment-related state changes.
Recoverable Background Jobs
Use leased work and retries to recover pending processing when a worker fails or a provider response is delayed.
Technical Implementation
The frontend uses Next.js, React, TypeScript, and Redux Toolkit. Express coordinates API operations, while PostgreSQL and Drizzle support relational persistence and explicit SQL where transactional behavior matters.
- Concurrency control: Row locks protect shared inventory during booking operations.
- Overlap protection: PostgreSQL exclusion constraints reject conflicting reservation ranges even when application requests race.
- Consistent reads: Repeatable-read snapshots support operations that need a stable view of related records.
- Payment integrity: Raw-body signature verification and event deduplication handle provider callbacks.
- Job recovery: Leased jobs, SKIP LOCKED, and retries coordinate pending work without requiring each worker to claim the same job.
- SSR state: Per-render Redux stores prevent state from leaking between server requests.
Architecture and Tradeoffs
Availability shown in the browser is useful feedback, but it cannot be the final guard against conflicting requests. Database locks and overlap constraints protect the booking invariant at commit time. Payment callbacks are similarly asynchronous: delivery can repeat or arrive after another operation, so event identity and recoverable processing matter more than assuming a single successful request.
Next.js Integration Boundaries
Compatibility adapters preserve cookies, redirects, and revalidation while backend modules evolve. Per-render stores initialize request-specific state without sharing it across visitors; the client then manages its own ongoing interactions.
Owner Workflow Evidence
The gallery contains actual development captures of the owner dashboard, calendar dialog, and mobile owner guidance. The records are demonstration data, and the images can be opened to inspect the full workflow captures.
Have a project or opportunity in mind?
Let's discuss employment opportunities or freelance work.
Contact Kunj

