Nexus Student Accommodation
UK Student Housing Reservation & Tenancy Workflow Platform
UK-based student housing and property rental platform enabling room reservations, tenancy workflows, automated tenant inquiries, property listings, and payment handling. Built to guarantee that no two applicants can ever be confirmed into the same room.
Architecture & System Design
Room availability is protected with timed reservation holds at the database level. Tenancy applications flow through a step-based workflow with document verification before deposit and installment payments are scheduled.
- Real-time room availability engine with timed reservation holds and auto-release
- Automated tenant inquiry routing directly to the relevant property manager
- Step-based tenancy application workflow with document upload and status tracking
- Payment scheduling for deposits and rent installments
Engineering Challenges
Preventing Double-Booked Rooms
Multiple applicants applying for the same room concurrently risked two tenancies being confirmed for one space.
Built a reservation hold system using timed database locks that automatically release if an application isn't completed in time.
Zero double-booking incidents across 900+ recorded reservations.
Streamlining Tenancy Applications
Manual, paper-style application review created bottlenecks and inconsistent document verification.
Built a step-based application workflow with document upload, verification checkpoints, and status tracking visible to applicants.
Tenancy completion rate reached 96%.
High Inquiry Volume During Peak Enrollment
Inquiry volume spiked sharply during enrollment season, overwhelming manual response capacity.
Implemented automated inquiry routing to the correct property manager with templated first-response messaging.
Average inquiry response time reduced to under 2 hours.
Core Features
Real-Time Room Availability
Live availability with timed reservation holds that auto-release on expiry.
Clean Code
1<?php23namespace App\Services;45use App\Models\Room;6use Illuminate\Support\Facades\DB;78class RoomReservationService9{10 public function hold(Room $room, int $applicantId): void11 {12 DB::transaction(function () use ($room, $applicantId) {13 $locked = Room::where('id', $room->id)14 ->where('status', 'available')15 ->lockForUpdate()16 ->firstOrFail();1718 $locked->update(['status' => 'held']);1920 $locked->reservations()->create([21 'applicant_id' => $applicantId,22 'expires_at' => now()->addHours(24),23 ]);24 });25 }26}