Commit Graph

160 Commits

Author SHA1 Message Date
db8b64cd5b Move user management button to header
Users button now appears next to the logged-in user info
in the top right header instead of as a tab. Only visible
to admin users.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 02:59:30 +02:00
37ffd7e46b Restrict saatavuus API to return only true/false
Requires exact match of osoite + postinumero + kaupunki.
No longer exposes addresses, speeds, or any customer data.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 02:43:58 +02:00
14707b9616 Add public availability API and settings panel
Public saatavuus endpoint with API key + CORS protection for
cuitunet.fi website integration. Admin settings tab for API key
management and testing. Includes standalone widget page.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 01:50:52 +02:00
8ba925d3dc Add leads (liidit) tab for tracking potential customers
- New Liidit tab with table, search, add/edit/delete
- Lead fields: company, contact, phone, email, address, city, status, notes
- Status workflow: Uusi → Kontaktoitu → Kiinnostunut → Odottaa toimitusta
- Color-coded status badges
- Detail view with notes display
- "Muuta asiakkaaksi" converts lead to customer with pre-filled data
- Lead CRUD endpoints in api.php with changelog logging
- leads.json added to .gitignore

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 01:35:04 +02:00
8a07689a1f Add security hardening, captcha login, and password reset via email
- .htaccess: HTTPS enforcement, security headers, block sensitive files
- data/.htaccess: deny all direct access to data directory
- Secure session settings (httponly, secure, strict mode, samesite)
- Rate limiting on login (10 attempts per 15 min per IP)
- Math captcha on login form (server-side validated)
- Password reset via email with token (1 hour expiry)
- Forgot password UI with reset link flow
- Email field added to user management
- Updated .gitignore for reset_tokens.json and login_attempts.json

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 01:00:19 +02:00
e4914e9edb Add user management, change log and customer archive
- Multi-user auth with username/password (replaces single password)
- Default admin account created automatically (admin/cuitunet2024)
- User CRUD with admin/user roles (only admin can manage users)
- All customer changes logged with timestamp, user and details
- Customer deletion now archives instead of permanently removing
- Archive view with restore and permanent delete options
- Tab navigation: Asiakkaat, Arkisto, Muutosloki, Käyttäjät
- Protect users.json, changelog.json and archive.json in .gitignore

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 00:41:40 +02:00
695d8c6545 Add multiple connections per customer, contract period, and layout redesign
- Refactor data model: each customer now has a liittymat array (auto-migration from old format)
- Add sopimuskausi (1/12/24/36 kk) and alkupvm fields per connection
- Form supports adding/removing multiple connection rows per company
- Add "use same as installation address" checkbox for billing address
- Move stat cards to compact sidebar on the right
- Place search bar above customer table

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 00:21:31 +02:00
c648c9311c Add file uploads and speed distribution chart
- File upload/download/delete per customer (max 20MB, stored in data/files/)
- Files section shown in customer detail modal
- Speed distribution chart replaces single "top speed" stat
- Bar chart shows all speeds with count, top speed bolded
- Customer delete also cleans up associated files
- data/files/ added to .gitignore

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 00:05:21 +02:00
127b581a69 Add address fields, e-invoice, stats and auto-backup
- Split address into street, postal code, city (sortable)
- Add billing postal code/city fields
- Add e-invoice address and operator fields
- Add trivia stats (top postal code, top speed, avg price)
- Improved layout with stat cards grid and max-width container
- Sticky header, modal animations, search icon
- Auto-backup on every save (keeps last 30 backups)
- Footer added

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 00:01:43 +02:00
297ba39c4f Add CuituNet Intra customer management CMS
Password-protected intranet for managing fiber internet customers:
- Customer table (company, address, speed, price)
- Click row to view full details (contact & billing info)
- Add, edit, delete customers
- Search and sortable columns
- Total billing summary
- PHP + vanilla JS + JSON storage

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 23:50:11 +02:00