A professional, tri-lingual (Amharic, English, Geez) ebook reader for the Book of Psalms
# Mezmure Dawit (Psalms Reader App)
Tri-lingual Psalms reader (Amharic, English, Geez) built with React + Vite + TypeScript, with Capacitor support for Android and iOS packaging from the same codebase.
## Features
- Read Psalms in Amharic, English, or Geez
- Language toggle and chapter navigation
- Swipe left/right between chapters in reader view
- Geez numeral display in Geez mode
- Custom Ethiopic fonts for Amharic and Geez
- Persistent settings (language, fonts, size, bold, theme)
## Tech Stack
- React 19 + TypeScript
- Vite 6
- Capacitor 7 (mobile wrapper)
## Getting Started
1. Install dependencies:
```sh
npm install
```
2. Run web app in development:
```sh
npm run dev
```
3. Build production web assets:
```sh
npm run build
```
4. Preview production build:
```sh
npm run preview
```
## Feedback (Tally)
Set your Tally form URL in environment config:
```sh
VITE_TALLY_FORM_URL=
tally.so
```
You can copy from `.env.example` into `.env.local` for local development.
## View Counters (Cloudflare Worker + D1)
The app now expects a counter API with these endpoints:
- `POST /hit?page=landing|app` increments a page counter
- `GET /summary` returns both counters
Frontend config:
```sh
VITE_COUNTER_API_BASE_URL=
your-domain.com
```
If `VITE_COUNTER_API_BASE_URL` is not set, the app defaults to `/api/views` on the current domain.
### Deploy The Counter Worker
Counter worker source is in `cloudflare/view-counter-worker`.
1. Create D1 database:
```sh
wrangler d1 create mezmure_dawit_metrics
```
2. Update `cloudflare/view-counter-worker/wrangler.toml`:
- Set `database_id` from command output.
3. Apply schema:
```sh
wrangler d1 execute mezmure_dawit_metrics --file cloudflare/view-counter-worker/schema.sql
```
4. Deploy worker:
```sh
cd cloudflare/view-counter-worker
wrangler deploy
```
5. Add route in Cloudflare Dashboard (or via Wrangler) so requests to:
- `
your-domain.com`
hit this Worker …