- Add delete all data button with red danger style and confirmation prompt
- Add DeleteUserData repo method that wipes user from all tables in a transaction
- Add helper methods deleteAccountPrompt and deleteAccountConfirm
- Implement consistency_master, perfect_week, remote_veteran, onsite_master achievements
- Add GetDailyXPInRange and SumWorkSecondsByWorkType repo methods
- Update Dockerfile to alpine3.23, docker-compose to use env vars for proxy/paths
- GenerateMonthlyReport now takes explicit Gregorian start/end range,
computed via monthGregorianRange, so Jalali/Hijri months spanning
two Gregorian months are fully covered in exports.
- Added loadLocation helper (UTC fallback on error) and replaced all
11 ignored-error call sites in handlers + export.
- Added periodicCleanup goroutine in NewHandler to prevent unbounded
growth of the rateLimit map.
- schemaPath is now read from SCHEMA_PATH env var (init), defaulting
to /app/db/schema.sql.
- Migrated sendDayView to use sendOrEdit helper, removing duplicated
send/edit branching.
- Removed dead code: userYearMonthToGregorian (unused), the old
startOffset function (replaced).
- Updated README with calendar docs, new env vars, full project tree.
- Updated .env.example and docker-compose.yml with SCHEMA_PATH.
- Simplified Makefile: added fmt, tidy, check, run-dev targets;
removed broken Make-glob prerequisite pattern.
- Add chat_id to events, settings, and days_off for per-user data
- Add proper graceful shutdown (signal handling, WaitGroup)
- Separate polling and webhook modes with goroutine management
- Add schema migration from single-user to multi-user schema
- Refactor handlers with shared actionFunc pattern (msg + callback)
- Fix schema path for Docker deployment (/app/db/schema.sql)
- Remove emoji from output text for cleaner formatting