76 Commits

Author SHA1 Message Date
root 5fd42177d3 feat: SEO/GEO optimization — meta tags, JSON-LD, FAQ, robots/sitemap
- index.html: title, meta description, OG tags, Twitter Card, canonical
- index.html: JSON-LD structured data (LocalBusiness + Service + FAQPage)
- Hero.jsx: H1 now contains primary keyword "защитная пленка для окон"
- Hero.jsx: subtitle expanded with specs (200–300 мкм, ГОСТ 30826-2014)
- TrustBar.jsx: h3 → h2 (fixes heading hierarchy)
- FAQ.jsx: new FAQ accordion (8 Q&As, GEO/AI-citation ready)
- App.jsx: FAQ added to landing page before LeadForm
- public/robots.txt: disallow /admin/ and /track/
- public/sitemap.xml: single-page sitemap for landing
2026-06-20 06:48:02 +00:00
houseassassin 08ec9e5a28 docs: update CLAUDE.md to reflect admin panel, PWA, and Docker setup 2026-05-12 15:24:40 +03:00
houseassassin 68e997a64a fix: enable auto-HTTPS for production domain via Caddy 2026-05-12 15:16:15 +03:00
houseassassin f4c4742a17 fix: Caddyfile — disable auto-HTTPS redirect for HTTP-only deployments 2026-05-12 13:06:52 +03:00
houseassassin 78b511e65d feat: Docker + Caddy production deployment setup 2026-05-12 11:46:42 +03:00
houseassassin bc73888355 feat: archive page for closed orders older than 30 days
Adds /admin/archive route with a table of closed orders (status = 'закрыт') created more than 30 days ago. Each row opens OrderModal for viewing/editing; a Restore button resets status to 'новая'. Sidebar gets an Archive nav item between Аналитика and Завершённые.
2026-05-12 11:37:59 +03:00
houseassassin b2dd497d1f feat: order comments, duplicate button, improved status timeline
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 11:37:45 +03:00
houseassassin 12cca64f61 feat: period filter in analytics — month/last month/3 months/all time
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 11:36:57 +03:00
houseassassin b69ea40f35 feat: filter bar in kanban — by manager, object type, overdue
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 11:36:36 +03:00
houseassassin 066007e72d feat: toast notifications + global search (Cmd+K)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 11:19:45 +03:00
houseassassin 5db7f0c428 feat: send-reminders Edge Function — push 1h before scheduled visit
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 11:17:18 +03:00
houseassassin 1fa97ca010 feat: Telegram message templates in OrderModal
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 11:17:09 +03:00
houseassassin 4b8028d7ae feat: highlight overdue orders in kanban and calendar
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 11:16:35 +03:00
houseassassin d94cbcc825 feat: CSV export from analytics page
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 11:16:33 +03:00
houseassassin 9d060a2dc9 feat: calendar — assign existing order to date via picker 2026-05-11 08:54:21 +03:00
houseassassin 4d4e84b5ed feat: calendar — open/edit orders and add new order with pre-filled date 2026-05-11 08:51:06 +03:00
houseassassin bdfc0ebb82 fix: scheduled_at input — store raw datetime-local value, convert on save 2026-05-11 08:48:49 +03:00
houseassassin 9b04a4527c feat: advanced analytics — revenue trends, status breakdown, manager stats
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 17:27:44 +03:00
houseassassin 3df6029f89 feat: client portal — public order tracking page at /track/:token
Adds anonymous order tracking via a unique public_token UUID on each order,
a standalone React page at /track/:token, and a share button in OrderModal.
2026-05-10 17:27:15 +03:00
houseassassin af9e7ce1af feat: push notifications, calendar view, photo attachments
- Push notifications: custom SW (injectManifest), usePushNotifications hook,
  push-notify Edge Function, push_subscriptions migration, bell toggle in header
- Calendar view: month-grid CalendarPage + useCalendar hook, scheduled_at column
  migration, datetime field in OrderModal, CalendarDays nav item + route
- Photo attachments: useOrderPhotos hook, photo gallery/upload in OrderModal (edit
  mode), order-photos Storage bucket migration with RLS policies

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 17:25:04 +03:00
houseassassin 5a9b6c4c7f feat: photo attachments for orders via Supabase Storage
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 17:23:10 +03:00
houseassassin d3a7e535cb feat: mobile kanban scroll, OrderModal bottom sheet, table scroll
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 17:20:46 +03:00
houseassassin 7af24587a0 feat: Telegram admin notification on order status change
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 17:20:08 +03:00
houseassassin a5877a4428 feat: PDF invoice generation in OrderModal
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 17:19:48 +03:00
houseassassin 8b29b68449 feat: mobile responsive sidebar drawer
Collapses sidebar into slide-over drawer on mobile (< 768px) with
hamburger toggle, overlay backdrop, and route-change auto-close.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 17:19:01 +03:00
houseassassin ef472f74d8 fix: remove .env and supabase/.temp from tracking, update .gitignore
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 17:13:02 +03:00
houseassassin aac7b7b0af feat: add PWA support for mobile installation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 17:11:25 +03:00
houseassassin 5412a70f83 feat: apply light theme redesign to admin panel
Replace dark sidebar and glass-panel aesthetic with clean light dashboard
style: white sidebar (#FFFFFF) with indigo (#4361EE) accent, #F5F7FA page
background, flat white cards, and scoped .admin-panel CSS overrides so the
public landing page is not affected.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 16:57:13 +03:00
houseassassin 8dae7f5d3b feat: add Clients page with order history
Groups orders by phone into a client list with expandable rows showing per-order history, summary cards for total clients and closed revenue, and a Clients nav item in the sidebar.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 16:26:50 +03:00
houseassassin 643fc62ddc feat: remove estimated_cost, auto-calculate final_cost in OrderModal
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 16:25:20 +03:00
houseassassin 05c1459e2f fix: revert upsert to update in useSettings to satisfy RLS policy
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 16:19:35 +03:00
houseassassin 73516f69a0 fix: convert empty numeric fields to null before insert/update orders
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 16:18:07 +03:00
houseassassin d4030d9c88 fix: integration fixes from final review
- useSettings: upsert instead of update (safe if migration rows missing)
- invite-admin-user: return created_at and last_sign_in_at in response
- UserManagementPage: clear deleteError when opening new confirmation

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 13:14:59 +03:00
houseassassin f6f5253f04 feat: add Users and Settings nav items and routes
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 13:13:07 +03:00
houseassassin aae78e95ca feat: add telegram, max, address fields to OrderModal
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 13:12:05 +03:00
houseassassin 769836714a fix: UserManagementPage delete error feedback, input disable, date guard
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 13:11:09 +03:00
houseassassin 4b244bf0bb feat: add UserManagementPage component 2026-05-10 13:09:30 +03:00
houseassassin 3bbcf7e256 fix: useAdminUsers null guard, unmount cleanup, split test
- Guard setUsers against null data with nullish coalescing (data ?? [])
- Add isMounted flag in useEffect to prevent setState after unmount
- Split combined inviteUser+deleteUser test into two independent it blocks

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 13:08:07 +03:00
houseassassin 9189cc1b55 feat: add useAdminUsers hook + tests 2026-05-10 13:06:31 +03:00
houseassassin b154996500 fix: forward invite error status and add listUsers pagination
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 13:05:26 +03:00
houseassassin 9ab728d721 fix: guard against null data.user in invite-admin-user Edge Function
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 13:04:41 +03:00
houseassassin 1954577d6a feat: add Edge Functions for admin user management 2026-05-10 13:02:17 +03:00
houseassassin f6a01812cd feat: add admin SettingsPage for configurable pricing 2026-05-10 13:00:30 +03:00
houseassassin 52b5b77bc4 feat: add useSettings hook for admin price management
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 12:59:02 +03:00
houseassassin 76b9913b09 fix: estimator always shows price (no false loading state) 2026-05-10 12:57:43 +03:00
houseassassin 9cfbee74e0 feat: estimator reads prices from DB via usePricing 2026-05-10 12:55:48 +03:00
houseassassin 775ad2d935 fix: usePricing handles DB errors and clears loading on failure 2026-05-10 12:54:28 +03:00
houseassassin c0d9732706 feat: add usePricing hook reading prices from settings table
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 12:48:11 +03:00
houseassassin d7446c45af docs: record DB migrations for admin panel v2 2026-05-10 12:47:15 +03:00
houseassassin 464cb3cab7 docs: add admin panel v2 implementation plan (10 tasks) 2026-05-10 12:37:27 +03:00