Skip to content

Commit 46762cb

Browse files
Yehuda-Zakeshclaude
andcommitted
Rewrite quick entry, reports and settings; add installer and self-update
The quick window now asks one thing — the time — and works the rest out: which seder it belongs to, whether אוהבי ה׳ is possible, and the departure (the end of the seder, since the window has no departure field by design). Beside it, dialogs for a justified lateness and for a missed seder; along the bottom, כולל ערב and תורתו בידו minutes and the month's figures. A normal day never needs the full app. The field takes 0915, 915, 9.15 or 09:15, an "אתמול" toggle covers whoever forgot on the way in, and any saved row loads back into the field for correction. PDF export was failing outright: the report was rasterized with html2canvas, which throws on any colour it cannot parse, and Tailwind 4 writes every colour as oklch(). Reports are now written as real text (src/lib/pdf-doc.ts) with Heebo embedded and a bidi pass of their own (src/lib/rtl-text.ts) — selectable, searchable Hebrew, tables that break between rows, page numbers. Heebo is shipped with the app instead of fetched from Google, so the UI and the documents use one font and both work offline. Also: - First-run wizard opens on the seder hours, the one thing the app cannot guess, then notification channels; the name and goal screens are gone. - History shows one month at a time, with arrows and a month list. - Statistics and insights were two screens showing the same four figures; now one, opening with a sentence rather than a bare score, and reading the arrival habit and week-on-week change out of the data. - Settings: ten sections to eight, duplicated settings merged, two sections that changed nothing removed. The audit log is gone; in its place a log file Rust owns (%APPDATA%\SederPlus\logs) that Settings shows. - Versions are whole numbers from 1. Pushing to main publishes the next one with the installer attached, taking the number from the tags so a release cannot trigger another. - SederPlusSetup.exe: both programs, per-user, no questions and no UAC — which is what lets "update now" download, install and restart quietly. - Removed what was left of the previous build: the Supabase config and key, bun.lock, the localStorage archive pass, html2canvas, settings that drove nothing. Net 500 lines lighter, with 130 more tests. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
1 parent a75e556 commit 46762cb

77 files changed

Lines changed: 5612 additions & 3506 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.env‎

Lines changed: 0 additions & 6 deletions
This file was deleted.

‎.github/workflows/build-windows.yml‎

Lines changed: 0 additions & 61 deletions
This file was deleted.

‎.github/workflows/ci.yml‎

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
1+
# Checks for anything that is not a push to main.
2+
#
3+
# A push to main goes through .github/workflows/release.yml instead, which runs
4+
# these same three checks against the version-stamped tree before it publishes
5+
# anything — so running them here as well would only duplicate the work.
16
name: CI (typecheck + tests)
27

38
on:
4-
push:
5-
branches: [main]
69
pull_request:
710
branches: [main]
811
workflow_dispatch: {}
@@ -19,8 +22,6 @@ jobs:
1922
with:
2023
node-version: 22
2124

22-
# See the note in build-windows.yml — switch back to `npm ci` once the
23-
# refreshed package-lock.json is committed.
2425
- name: Install dependencies
2526
run: npm install
2627

@@ -30,7 +31,7 @@ jobs:
3031
- name: Run unit tests
3132
run: npm test
3233

33-
# Catches a broken frontend build before the (much slower) Windows EXE
34+
# Catches a broken frontend build before the (much slower) release
3435
# workflow gets that far.
3536
- name: Build frontend
3637
run: npm run build

‎.github/workflows/release.yml‎

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
# A new version on every push to main.
2+
#
3+
# The version number is a whole number and comes from the tags, not from a file
4+
# in the repository: the newest `vN` tag decides, and this workflow publishes
5+
# N+1. Nothing is ever committed back to main, so a release cannot trigger
6+
# another release, and there is no version line for two branches to conflict
7+
# over.
8+
#
9+
# What ends up on the release:
10+
# SederPlusSetup.exe the installer — both programs, silent, per-user
11+
# SederPlus.exe the full app, for anyone who prefers no installer
12+
# SederPlusQuick.exe the quick-entry window
13+
#
14+
# The in-app updater looks for the setup file by name (pickInstaller in
15+
# src/lib/updater.ts), so keep it attached and keep the name.
16+
17+
name: Release
18+
19+
on:
20+
push:
21+
branches: [main]
22+
paths:
23+
- "src/**"
24+
- "src-tauri/**"
25+
- "public/**"
26+
- "installer/**"
27+
- "index.html"
28+
- "scripts/**"
29+
- "package.json"
30+
- "package-lock.json"
31+
- "vite.config.ts"
32+
- ".github/workflows/release.yml"
33+
workflow_dispatch:
34+
inputs:
35+
version:
36+
description: "Version number to publish (blank = next after the newest tag)"
37+
required: false
38+
type: string
39+
40+
permissions:
41+
contents: write # to create the tag and the release
42+
43+
concurrency:
44+
# Two pushes in quick succession must not both try to publish the same
45+
# number; the later one wins and the earlier is cancelled.
46+
group: release
47+
cancel-in-progress: true
48+
49+
jobs:
50+
release:
51+
runs-on: windows-latest
52+
steps:
53+
- name: Checkout
54+
uses: actions/checkout@v4
55+
with:
56+
fetch-depth: 0 # tags are how the version is decided
57+
58+
- name: Work out the version number
59+
id: version
60+
shell: pwsh
61+
run: |
62+
$requested = "${{ inputs.version }}"
63+
if ($requested -match '^\d+$') {
64+
$next = [int]$requested
65+
} else {
66+
# Highest existing vN tag, ignoring anything that is not just a
67+
# number — an old v1.0.3-style tag must not become 104.
68+
$numbers = @(git tag --list 'v*' |
69+
ForEach-Object { if ($_ -match '^v(\d+)$') { [int]$Matches[1] } })
70+
$latest = if ($numbers.Count -gt 0) { ($numbers | Measure-Object -Maximum).Maximum } else { 0 }
71+
$next = $latest + 1
72+
}
73+
"number=$next" >> $env:GITHUB_OUTPUT
74+
"tag=v$next" >> $env:GITHUB_OUTPUT
75+
Write-Host "Publishing version $next"
76+
77+
- name: Setup Node
78+
uses: actions/setup-node@v4
79+
with:
80+
node-version: 22
81+
82+
- name: Setup Rust
83+
uses: dtolnay/rust-toolchain@stable
84+
85+
# Rust builds are the slow part; without a cache every run recompiles
86+
# Tauri and its whole dependency tree.
87+
- name: Cache Rust build
88+
uses: swatinem/rust-cache@v2
89+
with:
90+
workspaces: src-tauri
91+
92+
- name: Install dependencies
93+
run: npm install
94+
95+
- name: Stamp the version
96+
run: node scripts/set-version.mjs ${{ steps.version.outputs.number }}
97+
98+
# A release that fails to start is worse than no release, so the same
99+
# checks CI runs happen here too, against the stamped tree.
100+
- name: Typecheck
101+
run: npx tsc --noEmit -p tsconfig.json
102+
103+
- name: Frontend tests
104+
run: npm test
105+
106+
- name: Rust tests
107+
run: cargo test --manifest-path src-tauri/core/Cargo.toml
108+
109+
- name: Build both EXEs
110+
run: npm run exe
111+
112+
- name: Build the installer
113+
run: npm run installer
114+
115+
- name: Publish the release
116+
uses: softprops/action-gh-release@v2
117+
with:
118+
tag_name: ${{ steps.version.outputs.tag }}
119+
name: גרסה ${{ steps.version.outputs.number }}
120+
target_commitish: ${{ github.sha }}
121+
generate_release_notes: true
122+
files: |
123+
release-win/SederPlusSetup.exe
124+
release-win/SederPlus.exe
125+
release-win/SederPlusQuick.exe
126+
fail_on_unmatched_files: true

‎.gitignore‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ node_modules
99
dist
1010
*.local
1111

12+
# TanStack Router plugin scratch output
13+
.tanstack
14+
1215
# Rust / Tauri build output — this gets very large
1316
src-tauri/target
1417
src-tauri/*/gen

‎.lovable/plan.md‎

Lines changed: 0 additions & 55 deletions
This file was deleted.

‎.lovable/project.json‎

Lines changed: 0 additions & 4 deletions
This file was deleted.

0 commit comments

Comments
 (0)