Hebrew Calendar for Google Calendar
The app is deployed at https://luachsync.elyasaf.net/
LuachSync is designed for recurring Hebrew-date events (for example, birthdays, yahrzeits, anniversaries, and memorial dates) and turns them into Gregorian calendar events that can be used in standard calendar systems like Google Calendar.
The app workflow is:
- You enter an event using a Hebrew date (for example: 1 Nisan 5740).
- The app calculates the corresponding Gregorian date for each yearly recurrence.
- It repeats this calculation for a long planning range (up to 100 years).
- It generates the full list of Gregorian events (first occurrence, second, third, and so on).
- You can then either:
- Export the events to an ICS file, or
- Use automatic Google sync to create a dedicated calendar and upload all generated events.
Example:
- If you enter a Hebrew birthday such as 1 Nisan 5740, LuachSync computes when that birthday falls each year in the Gregorian calendar and creates the recurring series for up to 100 years.
- With Google sync, LuachSync creates a new calendar in your Google account and inserts those calculated Gregorian birthday events into that calendar.
Hebrew calendar calculations are powered by Hebcal: https://github.com/hebcal
See the privacy policy at: https://luachsync.elyasaf.net/privacy
Prerequisites: Node.js
-
Install dependencies:
npm install -
Create
.env.localand set your keys:VITE_GOOGLE_CLIENT_ID=your_google_oauth_client_id
-
VITE_GOOGLE_CLIENT_IDis required for automatic Google Calendar sync (create new calendar + upload events). -
Do not put OAuth Client Secret or service-account private keys in this project.
-
Run the app:
npm run dev
- Create or select a Google Cloud project.
- Enable Google Calendar API.
- Create an OAuth 2.0 Client ID of type Web application.
Add these under Authorized JavaScript origins:
- Local dev:
http://localhost:3000 - GitHub Pages origin: e.g.,
https://<username>.github.io
- The app now asks for a custom target calendar name.
- If a calendar with that exact name already exists in the signed-in account, you will get a confirmation warning.
- If you approve, the existing calendar is deleted and recreated with the same name, and then events are imported via Google Calendar API.
- Safe in frontend: OAuth Client ID.
- Never expose in frontend: OAuth Client Secret, service-account JSON private key.
- API key is not needed for this write flow.
- Build:
npm run build - Deploy:
npm run deploy - In repository settings, enable GitHub Pages from the
gh-pagesbranch if not already enabled.
