Skip to content

Releases: hamedtkd/saat-yar

Saat-Yar v2.8.1

Choose a tag to compare

@hamedtkd hamedtkd released this 08 Oct 05:49

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

Choose a tag to compare

@hamedtkd hamedtkd released this 06 Oct 05:42

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 .xlsx workbooks
  • 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

Choose a tag to compare

@hamedtkd hamedtkd released this 16 Sep 07:42
459592e

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

Choose a tag to compare

@hamedtkd hamedtkd released this 20 Aug 11:30

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/964 Node 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 → run npm run audit:production → only then create the annotated v2.6.0 tag.
  • The tag must point at the exact production-audited main commit.

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 /today remains 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 /month route remains stable for compatibility.

  • PWA install identity is now Saatyar | ساعت یار, with compact launcher label Saatyar.

  • 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, and workProjectId? 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 main commit;
  • run npm run audit:production;
  • create annotated tag v2.6.0 only after that audit passes;
  • the tag must point to the exact production-audited main commit.

No product feature, schema change, dependency update, or post-audit code change belongs in Phase 202.

SaatYar 2.4.0

Choose a tag to compare

@hamedtkd hamedtkd released this 12 Aug 11:02
71f6732

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 /onboarding route 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:i18n gate 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 dev path 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:vinext remains 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.2 for 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/title follows 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.