Repository navigation
Releases: hamedtkd/saat-yar
Release list
Saat-Yar v2.8.1
Saat-Yar v2.8.1
Reports print hotfix
- Fixed analytical charts overflowing their cards in browser print/PDF output
- Recharts print wrappers and SVGs are now bounded to the printable chart region
- Prevented charts from overlapping other charts or the report table
- Preserved the compact two-column analytical chart layout in A4 landscape
Report wording
- Replaced month-specific Reports wording with report/range-neutral copy
- Reports without a date filter no longer incorrectly say "this month"
- Arbitrary report date ranges now use scope-appropriate wording
- The Month page keeps its existing month-specific terminology
Print accessibility
- The "Skip to main content" accessibility link remains available on screen
- The skip link is now hidden from printed reports
Verification
- Native browser Print Preview was manually verified after the hotfix
- Automated print-media geometry checks confirm charts remain inside their cards
- Full release validation, browser journeys, build, lint, typecheck, and repository audits passed
Saat-Yar v2.8.0
Saat-Yar v2.8.0
Highlights
- Separate Employee and Freelancer reporting in Hybrid mode
- Correct payroll estimates for partial and multi-month report ranges
- Real XLSX workbook export with stronger spreadsheet safety
- Improved PDF and print reporting
- More reliable persistence and timer recovery
- Smarter stand-up reminder behavior around Lunch and Breaks
Reports
- Hybrid mode now provides distinct Employee and Freelancer report views
- Report filters, search, summaries, charts, exports, and print paths are more consistent
- Employee date search supports visible localized date representations
- Long mobile report descriptions wrap correctly
- Employee CSV/XLSX exports include additional report details
Payroll
- Report payroll is calculated independently per calendar month
- Partial months are prorated using scheduled work minutes
- Multi-month report estimates aggregate monthly calculations
Export & Print
- Excel export now produces real
.xlsxworkbooks - CSV protects formula-like text values
- XLSX text remains literal rather than becoming formulas
- Invalid XML control characters are sanitized safely
- Export failures now show localized feedback
- Report print/PDF includes filters, summaries, charts, and improved multipage layout
Reliability
- Multi-tab writes use revision/CAS protection
- Same-tab persistence writes are serialized
- Hibernate/suspend recovery better protects active timers
- Stand-up reminder cadence resets after Lunch and Breaks
Quality
- Behavioral regression coverage expanded
- Test-coupling audit returned within the established budget
- Release, hardening, UI, schema, dependency, import, and i18n checks hardened
Verification note
Automated tests, build, browser smoke journeys, and repository audits were run as release gates.
The following environment-specific checks remain manual:
- opening the generated XLSX in Microsoft Excel
- opening the generated XLSX in LibreOffice
- native Chrome/Edge Print Preview visual review
- a real Windows Hibernate/resume cycle
Saatyar v2.7.0
Saatyar v2.7.0
Appearance Studio is now a full application-wide customization system.
Highlights
- New Appearance Studio workspace with live preview
- Expanded light and dark theme customization
- Improved Persian font support
- Large Persian and Latin font library
- Separate heading and body typography
- Expanded neutral tone collection
- Improved light theme color balance
- True zero-radius mode
- Multiple radius levels
- Density and surface customization
- Sidebar style customization
- Sidebar width customization
- Active navigation style customization
- Improved theme propagation across the application
- Floating app notices instead of layout-breaking banners
- Improved toast presentation
- Improved settings icon visibility in light mode
- Better appearance preset import and export compatibility
- Extensive theme and radius regression coverage
Quality
- 987 automated tests passed
- 0 failed
- Production theme contracts hardened
- Existing appearance presets remain backward compatible
Saatyar 2.6.0
Saatyar 2.6.0 Release Notes
Candidate date: 2026-08-20
Final release date: 2026-08-20
Saatyar 2.6.0 is the final minor release after 2.5.0 and packages the product and hardening work from Phases 195 through 200. Phase 200 closed on commit 15f5af8 with 958/958 tests. The Phase 201 candidate is commit 3e5bcbf, verified with 964/964 tests plus the full Production/Freelancer/Employee/Pairing/Vercel gate. Phase 202 is release-only: no new product feature enters this version.
Final release contract
- Candidate commit:
3e5bcbf(964/964Node tests plus full browser/pairing/Vercel gate). - Final source target: 970/970 Node tests after Phase 202 release-contract coverage.
- AppData: v21, migrating from released 2.5.0 schema v20.
- Rollout order is mandatory: merge the verified finalization commit to
main→ wait for the Vercel production deployment → runnpm run audit:production→ only then create the annotatedv2.6.0tag. - The tag must point at the exact production-audited
maincommit.
Highlights
-
Final visual lock: Violet (
#8b5cf6) is the default brand preset, install/social icon assets are refreshed, and README media is regenerated from the real production build. -
Public About / Help / Privacy / Terms surfaces and explicit Google Calendar disclosures for OAuth verification readiness.
-
Real GA4 delivery with local consent/opt-out and a privacy-safe event payload that excludes work content.
-
Corrected leave intelligence in Work Calendar and recent activity without inventing worked minutes.
-
Shared portal-safe, viewport-aware tooltip infrastructure and broader production observability.
-
Redesigned onboarding/first-run and a freelancer workflow centered on a project timer rather than employee attendance semantics.
-
Freelancer Work Session with Start / Pause / Resume / Finish, reload recovery, real persisted timeline, and single-session protection.
-
Dedicated Employee / Freelancer / Hybrid Today routes while
/todayremains a compatibility entry point. -
Shared responsive Date/Time Picker with a mobile drawer, desktop popover, time wheel, and no remaining native datetime-local editor.
-
Explicit 320px hardening plus 360/375/425 responsive coverage across RTL/LTR surfaces.
-
Employee Activity Context with an optional Work Item, employee Work Projects isolated from client projects, live activity timing, and completed activity edit/delete.
-
Direct Clock-in / Clock-out / Lunch / Break editing without opening the full completed-day editor.
-
Trust footer/pages, cached GitHub star count with safe failure behavior, and final header/mobile navigation polish.
-
“My month” is now Work Calendar (
تقویم کاریin Persian); the technical/monthroute remains stable for compatibility. -
PWA install identity is now
Saatyar | ساعت یار, with compact launcher labelSaatyar. -
Long-date reading order is language-specific: Persian follows weekday, day, month, year; English follows weekday, month, day, year.
-
Runtime favicon/brand follows the active accent while the installed launcher icon remains a stable app identity.
-
Release hardening audits dynamic code, persistent OAuth token storage, unsafe external links, reviewed inline HTML, Vercel security headers, and explicit manifest/service-worker revalidation.
Data and migration contract
- Released 2.5.0 schema: v20
- 2.6.0 release schema: v21
- Audited release migration: v20 → v21
- v21 adds
ActivitySegment.title?,workProjects, andworkProjectId?for Employee/Hybrid activity context. - Employee work projects remain isolated from Freelancer client projects; Hybrid may access both contexts without leakage.
- Google Calendar cache/token, analytics consent, and locale/PWA preferences remain outside AppData.
- Backup/restore and device-transfer behavior for v21 are covered by the Phase 200 behavioral gate.
Verified Phase 200 baseline
958 / 958 tests passed
TypeScript passed
ESLint passed
Hardening audit passed
AppData schema v21 audit passed
Behavioral migration v17 -> v21 passed
Next.js 37/37 static routes passed
Production browser smoke passed
Freelancer browser smoke passed
Employee browser smoke passed
WebRTC pairing smoke passed
Vercel static-export + security-header audit passed
PWA offline reload passed
RTL 360/375/425 + LTR 375 + Employee/Freelancer 320 passed
Final rollout boundary
Phase 202 finalizes source and documentation, but the public release is not considered deployed until the production gate is green:
- commit the Phase 202 finalization source on
dev; - merge that exact commit to
main; - wait for the Vercel production deployment of the same
maincommit; - run
npm run audit:production; - create annotated tag
v2.6.0only after that audit passes; - the tag must point to the exact production-audited
maincommit.
No product feature, schema change, dependency update, or post-audit code change belongs in Phase 202.
SaatYar 2.4.0
Saatyar 2.4.0 Release Notes
Candidate date: 2026-08-11
Final release date: 2026-08-12
Saatyar 2.4.0 is the first minor release after 2.3.2 and packages Phases 166 through 178. Phase 179 candidate 1cabdb4 was completed and the initial controlled dev -> main merge is 7627e99. Phase 180 finalizes the release contract, the 770-test gate, and the requirement for a green production audit before the annotated tag.
Highlights
- Onboarding moved to the dedicated
/onboardingroute with real recovery/re-entry and Employee/Freelancer/Hybrid personalization. - Leave entitlement now separates the legal allowance, actual scheduled workdays, holidays, usage, and carry-over correctly.
- Completed-day editing has a persistent action bar, dirty state, and save feedback near the editor.
- The Import Wizard supports safe Backup and CSV/TSV preview, mapping, Persian/Gregorian dates, Persian digits, and explicit conflict strategies.
- A shared low-power runtime clock drives live timers without unnecessary hidden-tab ticks.
- Full i18n coverage now supports Persian RTL and English LTR across shell, core pages, business flows, Settings, Onboarding, Import, About, and system/PWA surfaces.
- CSV/Excel/Print, validation/toasts, runtime error bridging, route titles, and shared RTL/LTR geometry follow the active locale.
- The repository-wide
npm run audit:i18ngate prevents new hard-coded Persian UI outside a narrow documented allowlist. - A responsive quick language switch now keeps the current flag visible: desktop uses the sidebar utility area, while tablet/mobile use a compact header control so language access does not crowd navigation or break alignment.
- Calendar display is now independent but language-aware: Automatic uses Gregorian for English and Persian/Jalali for Persian, while Settings can explicitly override either combination without changing stored date keys.
- Month status markers use logical positioning so holiday/leave/deficit dots no longer overlap day numbers in LTR layouts.
- Payroll breakdown labels are derived from locale keys instead of Persian strings returned by the domain engine.
- The vendored QR encoder now has a browser-safe ESM entry point, fixing the Settings runtime failure under the Vite development server without adding a dependency.
- The default local
npm run devpath now uses Next.js, matching the production build path and avoiding the Vite/Vinext HMR/RSC development-only failure seen during Windows visual QA;npm run dev:vinextremains available explicitly. - Repeated page and section helper copy is now collapsed into compact keyboard-accessible info tooltips, while task-critical form hints, warnings, and empty-state guidance stay inline.
- Month day details isolate clock-in/clock-out values for stable bidi rendering, and zero-length work spans are now marked invalid instead of complete.
- The Iran language flag is intentionally rendered as plain green/white/red bands without a center emblem.
- The live Today timer now uses a theme-aware animated flip clock while preserving the shared low-power runtime scheduler instead of introducing another interval.
- Clock-in and clock-out regain proper card width on tablet/desktop; privacy, language, and theme are now visually separate controls rather than unrelated actions inside one grouped shell.
- Mobile Settings navigation removes the visible horizontal scrollbar, uses a two-column group grid on narrow screens, and keeps swipeable section items without breaking the header.
- The language navigation label is simplified to “Language”; direction remains an automatic locale behavior.
Data and dependency contract
- AppData schema: v17
- New migration: none
- New dependency introduced by the candidate:
framer-motion@^12.42.2for the flip-clock digit transition - Backup and domain/storage values remain locale-neutral.
- Static metadata and the install manifest remain canonical Persian in 2.4.0, while runtime
lang/dir/titlefollows the selected locale.
Verified baseline
Phase 178 commit 887158c passed:
758 / 758 tests passed
TypeScript passed
ESLint passed
Next.js production build: 22 / 22 routes
PWA precache: 44 build assets
Production browser smoke passed
Freelancer browser smoke passed
Employee browser smoke passed
WebRTC pairing: 4 encrypted chunks + ACK
Vercel static-export audit passed
i18n closure audit passed
Phase 179 added six candidate contract tests and reached the 764/764 candidate gate. Phase 180 adds six finalization contracts, so the final gate must reach 770/770.
Rollout
The Phase 179 candidate is recorded as 1cabdb4, and the initial controlled dev -> main merge is verified as 7627e99. Phase 180 is committed on dev, merged to main, and deployed by Vercel. Only after npm run audit:production passes may the annotated v2.4.0 tag be created on that exact final commit. The tag is the source of truth for the final release SHA; the manifest deliberately avoids a self-referential release-commit field.