Full-Stack Web Development

Homestay Booking System

A homestay booking platform with availability conflict detection, customer booking lookup, and a secure role-based admin portal for managing bookings and administrator accounts.

Technologies
C#ASP.NET Core Razor PagesEF CoreSQLiteBootstrap

Project Overview & Context

  • The Problem: Traditional homestay management relies heavily on spreadsheets or manual bookkeeping, inviting human error, unorganized scheduling conflicts, and missing audit logs.
  • The Solution: A clean, data-driven web environment built specifically to model, manage, and process vacation rental agreements and client stay histories.

Key Features & User Flow

  • Booking Lifecycle Engine: Granular state machine managing stay records natively through strict status tracking (Pending, Approved, Cancelled).
  • Secure Administration Space: Dedicated, isolated admin area to create, audit, modify, and purge booking records.
  • Deterministic Code Generation: An automatic string generator engine that outputs clean, unique alphanumeric reservation codes upon reservation checkout.
  • Dynamic Data Filtering: Built-in viewing filters allowing administrators to isolate specific client history files by status, date, or user identifiers.

Technical Architecture & Tech Stack

  • Framework: Built on ASP.NET Core using Razor Pages architecture, enabling server-rendered pages with built-in validation attributes for rapid web application development.
  • Database & ORM: SQLite paired with Entity Framework Core (EF Core) for robust schema migrations and object-relational mapping.
  • Identity Controls: Deployed safe ASP.NET Core Identity integrations to implement explicit user validation boundaries.

Engineering Challenges & Solutions

Dynamic State Validation & Multi-Source Storage Swap

  • Situation: Hardcoding direct database engines into Razor endpoints breaks structural testing patterns and makes it impossible to switch database backends without massive downstream refactoring.
  • Task: Build a modular, decoupled data layer capable of switching between local JSON mock objects and a live database with zero breaking changes to business logic.
  • Action:
    1. Introduced an abstract dependency contract layer (IBookingRepository) that standardizes all write and query interfaces.
    2. Engineered a local file backup repository fallback (JsonBookingRepository) utilizing atomic disk writes alongside the primary database layer.
  • Result: Achieved complete storage separation, making the infrastructure highly testable and capable of switching database providers seamlessly.

Gambaran Keseluruhan & Konteks Projek

  • Masalah: Pengurusan inap desa tradisional sangat bergantung pada hamparan data atau pembukuan manual, yang terdedah kepada kesilapan manusia, konflik jadual yang tidak teratur, dan kehilangan log audit.
  • Penyelesaian: Persekitaran web berasaskan data yang bersih, dibina khas untuk memodelkan, mengurus, dan memproses perjanjian sewaan percutian serta sejarah penginapan pelanggan.

Ciri-Ciri Teras & Aliran Pengguna

  • Enjin Kitaran Hayat Tempahan: Enjin keadaan terperinci yang menguruskan rekod penginapan secara terbina melalui penjejakan status yang ketat (Menunggu, Diluluskan, Dibatalkan).
  • Ruang Pentadbiran Selamat: Kawasan pentadbir terasing khas untuk membina, mengaudit, mengemas kini, dan memadam rekod tempahan.
  • Penjana Kod Deterministik: Enjin penjana rentetan automatik yang mengeluarkan kod tempahan abjad angka yang unik semasa pendaftaran tempahan.
  • Penapisan Data Dinamik: Penapis pandangan terbina yang membolehkan pentadbir mengasingkan rekod sejarah pelanggan mengikut status, tarikh, atau pengecam pengguna.

Seni Bina Teknikal & Stack Teknologi

  • Rangka Kerja: Dibina di atas ASP.NET Core menggunakan seni bina Razor Pages, membolehkan halaman diisi dari pelayan dengan atribut pengesahan terbina untuk pembangunan aplikasi web yang pantas.
  • Pangkalan Data & ORM: SQLite dipasangkan dengan Entity Framework Core (EF Core) untuk migrasi skema yang teguh dan pemetaan objek-hubungan (ORM).
  • Kawalan Identiti: Mengintegrasikan ASP.NET Core Identity yang selamat untuk melaksanakan sempadan pengesahan pengguna yang jelas.

Cabaran Kejuruteraan & Penyelesaian

Pengesahan Keadaan Dinamik & Pertukaran Penstoran Pelbagai Sumber

  • Situasi: Mengekod terus enjin pangkalan data ke dalam titik akhir Razor merosakkan corak ujian berstruktur dan menyukarkan pertukaran pangkalan data tanpa penyusunan semula kod yang besar.
  • Tugasan: Membina lapisan data berasingan yang mampu bertukar antara objek ujian JSON setempat dan pangkalan data hidup tanpa sebarang perubahan pada logik perniagaan.
  • Tindakan:
    1. Memperkenalkan lapisan kontrak kebergantungan abstrak (IBookingRepository) yang menyelaraskan semua antara muka penulisan dan pertanyaan data.
    2. Merangka repositori sandaran fail setempat (JsonBookingRepository) yang memanfaatkan penulisan cakera atom di samping lapisan pangkalan data utama.
  • Hasil: Mencapai pengasingan penstoran sepenuhnya, menjadikan infrastruktur sangat mudah diuji dan mampu bertukar penyedia pangkalan data secara lancar.