Algerian leave calculator PWA: compute annual leave, track public holidays, and get push reminders.
# Permission
An Algerian leave calculator built as a mobile-first Progressive Web App. Calculate annual leave entitlements with automatic handling of Algerian public holidays, and get reminders via push notifications.
🔗 **Live app:**
permission-kappa.vercel.app
## Features
- **Leave calculator** — computes annual leave based on hire date and work schedule, accounting for Algerian public holidays.
- **Dashboard** — overview of remaining leave, history, and upcoming entitlements.
- **Notifications** — opt-in push reminders (web push + Supabase), with an in-app permission gate and notification bell.
- **Bilingual UI** — supports Arabic and French with right-to-left layout.
- **Theme support** — light/dark mode.
- **Installable PWA** — full-screen install landing page for Android and iOS, offline support via service worker.
## Tech Stack
- React 19 + TypeScript
- Vite with `vite-plugin-pwa`
- Tailwind CSS v4
- Supabase (backend) + web-push (notifications)
- Telegram bot (admin)
- Vitest for tests, oxlint for linting
- Deployed on Vercel
## Getting Started
Requirements: Node.js >= 20.19.
```bash
npm install
npm run dev
```
## Available Scripts
| Script | Description |
| ------------------- | ------------------------------------ |
| `npm run dev` | Start the Vite dev server |
| `npm run build` | Lint, typecheck, and production build |
| `npm run preview` | Preview the production build |
| `npm run test` | Run the test suite (Vitest) |
| `npm run lint` | Lint with oxlint |
| `npm run typecheck` | Type-check with `tsc -b` |
## Project Structure
```
src/
components/ UI components (tabs, install page, push gate, ...)
hooks/ React hooks (PWA install, push subscription, swipe, ...)
lib/ Utilities (dates, holidays, storage, i18n, notifications, ...)
App.tsx Root component: routes between install landing and the main …