Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Campus Event Planner

An offline-first PWA for managing campus events, built with with React 19, TypeScript, and Vite. Events Persist locally via IndexedDB, so the app works with no network.

CI pages-build-deployment

Live demo

screenshot

Highlights

  • Clean architecture a Repository pattern behind a RepositoryContract interface keeps the domain model fully decoupled from storage (swap IndexedDB in one file).
  • Offline-first PWA service worker + IndexedDB; degrades gracefully offline, informing users.
  • Encapsulated domain model with private fields and self-validating invariants.
  • Tested, test driven development (TDD) using Jest + React Testing Library; the domain model and repository layers are covered to 75-100%.

Tech stack

JavaScript - React 19 - TypeScript - Vite - TailwindCSS 4 - IndexedDB - Jest - ESLint - Prettier

Run locally

npm install
npm run dev        # http://localhost:5173
npm test           # unit + component tests
npm run build      # type-check + production build

Core Concepts

  1. Repository Pattern: The Repository Pattern is an architectural pattern that separates the business logic from the data access layer. It provides an abstraction layer for data access, allowing the business logic to be decoupled from the specific storage implementation.

  2. Dependency Injection: Dependency Injection is a design pattern that allows components to be loosely coupled and easily testable. It involves injecting dependencies into a component rather than hardcoding them.

  3. Asynchronous Persistence: Asynchronous persistence refers to the use of asynchronous operations to persist data. In this project, IndexedDB is used to store events, and the repository layer handles the asynchronous operations required by IndexedDB.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages