Lago
5d792e8ae7
feat: Phase 2 — user experience & advanced filtering
...
- Add price_min/price_max filters per keyword (stored in cents)
- Add allowed_postcodes filter per keyword (text[] array)
- Add mute hours per user with cross-midnight support
- Add digest mode with configurable interval and buffered summaries
- 10 new bot commands: /price_min, /price_max, /clear_price, /postcode,
/clear_postcode, /mute_hours, /mute_off, /digest_on, /digest_off, /status
- Updated keyword card display to show price range and postcodes
- New migrations: 05-keyword-filters.sql, 06-user-settings.sql
2026-07-10 21:19:34 +02:00
Lago
3e7e5d0b32
feat: Phase 1 — reliability & completeness improvements
...
- httpx singleton: replace per-call AsyncClient with module-level singleton
using keepalive pool (configurable via env vars). Close client on shutdown.
- Scraper pagination: multi-page fetching (default 2 pages/60 ads, configurable
via SCRAPE_MAX_PAGES). Cursor-based early-stop to skip stale pages. Tracks
ads_cursor per keyword for cross-cycle deduplication.
- Notification retry queue: persistent notification_queue table with exponential
backoff (max 5 attempts → dead). Failed Telegram notifications are enqueued
instead of silently dropped. Queue processed at start of each scheduler cycle
(50 items max limit). /stats endpoint reports pending/dead counts.
2026-07-05 22:22:28 +02:00
hermes
c9dd9ba076
docs(plan): add Phase 1, 2, 3 implementation specs
2026-07-05 08:51:38 -04:00
hermes
f540cbe7ef
feat(phase-0): stability hardening — search path fix, auto-migrations, graceful shutdown, health endpoint
...
- Remove SET search_path from db.py and migration SQL (Supabase uses public schema)
- Add migrate.py with tracking table for forward-only SQL migrations
- Add entrypoint.sh: waits for DB, runs migrations, then starts app
- Copy 01-schema.sql + zz-seed.sql to worker/src/migrations/
- Add health.py: /health endpoint (200/503) with DB connectivity + scheduler staleness checks
- /stats endpoint with keyword/ad/notification counts
- Rewrite main.py shutdown sequence: signal handler, 5s grace for scheduler, ordered cleanup
- Update Dockerfile: HEALTHCHECK directive, entrypoint, COPY migrations
- Update docker-compose.yml: stop_grace_period=15s, healthcheck config, env vars
- Add aiohttp>=3.9 to requirements.txt for health server
2026-07-04 11:30:45 -04:00
Lago
64506f20b3
chore: merge main into feat/supabase-migration
2026-07-04 15:16:17 +02:00
Lago
fa551556e6
fix: use async callable for asyncpg pool init instead of string
2026-07-04 11:23:15 +02:00
Lago
753174b946
switch to direct DB connection on supabase_default network, bypass supavisor
2026-07-04 11:21:01 +02:00
Lago
98c71d4232
Migrate from local Supabase stack to external Supabase instance
...
- Reduce docker-compose from 6 services to 1 (worker only)
- Connect via supavisor pooled port (6543) on dedicated Supabase
- Add willhaben_tracker schema with search_path in asyncpg pool init
- Create consolidated migration SQL for Supabase SQL Editor
- Update .env.example with new connection pattern
2026-07-04 10:33:27 +02:00
Lago
39ef92ee51
Update .env.example
2026-06-21 20:50:03 +02:00
Lago
46c1b01e98
refactor: consolidate 3 migrations into single 01-schema.sql, remove legacy files
2026-06-17 13:42:14 +02:00
Lago
c4745579ed
fix: swap stats/admin back buttons, fix summary message KeyError
2026-06-17 13:36:31 +02:00
Lago
b59a2ab922
fix: summary message, stats back, admin cancel/back buttons, keyword added confirmation, notifications logging
2026-06-17 13:18:33 +02:00
Lago
c48706ac9c
refactor: summary after keyword list, remove separators, back button in admin
2026-06-17 12:56:19 +02:00
Lago
0634755e6b
fix: cancel shows main menu greeting instead of 'Cancelled.'
2026-06-17 12:41:23 +02:00
Lago
bfc610dd6b
fix: interval presets, back buttons, and cleaner confirmation formatting
2026-06-17 12:39:10 +02:00
Lago
075765af35
fix: handle asyncpg UUID in _safe_id + add cancel button to keyword input
2026-06-17 12:31:24 +02:00
Lago
00dc7876e1
fix: use colon separator in menu button callback_data to match router
2026-06-17 12:28:16 +02:00
Lago
9ee5644a99
fix: await _handle_callback in callback_router
2026-06-17 12:27:04 +02:00
Lago
8307c6b844
fix: wrap callback router in try/except to expose swallowed errors
2026-06-17 12:17:40 +02:00
Lago
72c2ddc22f
fix: remove dead .answer attr on Message in start_handler
2026-06-17 12:10:58 +02:00
Lago
3ea7d42cae
fix: use tuples for PTB set_my_commands (not dicts)
2026-06-17 11:53:53 +02:00
Lago
709e0a65ed
fix: call set_my_commands in async context via setup_global_commands
2026-06-17 11:53:06 +02:00
Lago
4f7cb86c81
fix: await set_my_commands via post_init async hook
2026-06-17 11:48:10 +02:00
Lago
f25ff56bab
feat: full bot redesign with inline keyboards, callback routing, Vienna timezone\n\n- Two global commands only: /start (main menu), /admin (admin panel)\n- Inline keyboard UI with action buttons per keyword card\n- Add flow: keyword text → confirmation Yes/No → edits message\n- Edit submenu: change name (in-place) or interval (presets + custom)\n- Toggle active/inactive, remove with confirmation\n- Stats formatted inline\n- All times shown in Vienna timezone (Europe/Vienna)\n- Message editing with fallback to new message on 24h limit\n- Removed all old text commands: /add, /list, /delete, /interval, /stats\n- Updated README with new UI documentation
2026-06-17 11:46:57 +02:00
Lago
40230d14fc
docs: update README with Tizona deployment guide, /interval command
2026-06-17 10:32:25 +02:00
Lago
6210d89270
fix: only notify for genuinely new ads, not every ad on page
2026-06-17 09:25:26 +02:00
Lago
88059fa0ee
fix: skip notifications during baseline load, add /interval command with /list display
2026-06-17 08:44:35 +02:00
Lago
c373e09567
fix: use kw.created_at instead of ks.created_at in /list
2026-06-17 08:28:26 +02:00
Lago
a21c310eeb
fix: remove stale mark_notified import, full main.py scheduler refactor, fix scraper datetime+image extraction
2026-06-17 08:27:34 +02:00
Lago
b93811bb1b
fix: remove dead query_ads ref, fix /stats for global dedup schema
2026-06-16 22:13:25 +02:00
Lago
fcd192420f
feat: add missing migration 02 (images+pricing) and 03 (global keywords)
2026-06-16 22:08:55 +02:00
Lago
0b19c3d8f2
fix: mount all migrations in compose, fix post-boot grants for new schema
2026-06-16 22:07:49 +02:00
Lago
3136d55742
fix: Postgres auth + worker startup
2026-06-16 19:38:32 +02:00
Lago
1a5d998cc8
chore: local dev paths, drop ADMIN_TELEGRAM_IDS from compose
2026-06-16 19:27:35 +02:00
Lago
89a00c3295
feat: DB-driven whitelist with is_admin, auto-register on /start, admin commands (/adduser /removeuser /users)
2026-06-16 19:24:51 +02:00
Lago
7c9db4d705
feat: docker-compose + .env.example + postgresql.conf + updated README
2026-06-16 19:16:08 +02:00
opencode
fbbdc5e54b
feat: python worker (bot, scraper, notifier, scheduler)
2026-06-16 19:12:35 +02:00
Lago
d32ce26d9e
feat: supabase schema migrations + kong gateway config
2026-06-16 19:06:50 +02:00
Lago
1c798efe15
init: scaffold project structure
2026-06-16 19:04:14 +02:00