16 Commits

Author SHA1 Message Date
jp
3155020f67 Use 0-prefix format for who-called.co.uk lookup URLs
- swap +44 prefix to 0 before lookup
- applied to messages and contacts dropdown menus
2026-08-13 20:04:00 +01:00
jp
efc7e91651 Use who-called.co.uk for phone lookup in dropdown menus
- search by sanitised digits only
- applied to both messages and contacts pages
2026-08-13 20:01:37 +01:00
jp
2b88e88d05 Add dropdown menu on contacts page rows
- ⋮ Call back / Lookup number beside each contact
- same styling as messages page menu
2026-08-13 19:50:22 +01:00
jp
ebc905984c Right-align dropdown burger icon on message rows
- use flexbox space-between in .who
- name/number truncates with ellipsis
- menu pinned right with flex-shrink:0
- tighter button padding and dropdown gap
2026-08-13 19:48:46 +01:00
jp
58de4653e1 Add dropdown menu on messages page contact rows
- ⋮ button beside contact name/number
- Call back uses tel: link with sanitised digits
- Lookup number opens Google search in new tab
- dropdown closes on outside click
2026-08-13 19:46:55 +01:00
jp
7dd2d371d2 Sanitise callerid number in add-contact modal
- extract E.164 from angle brackets when present
- show 'Number: ...' at top of modal instead of readonly input
- use same sanitiseNumber() for message list callback links
2026-08-13 19:04:01 +01:00
jp
20cb36e33b Add number field to add-contact modal + trim number before submit
- show caller number as readonly field in modal
- strip whitespace from number before API call
- omit number from payload if empty
2026-08-13 18:58:32 +01:00
jp
f2f8185c20 Use floating modal for add-contact from messages page
- replace inline row form with overlay modal
- keep Name + Email fields and POST /api/contacts submit
2026-08-13 18:56:18 +01:00
jp
f91321c7eb Replace add-contact prompt with inline row form on messages page
- inline Name + Email inputs when clicking '+ Add to contacts'
- uses existing POST /api/contacts via TanStack mutation
2026-08-13 18:54:02 +01:00
jp
e6ee7bef81 Force dark input bg with bare input selector
- add input, before typed selectors to catch all inputs
- include -moz-appearance:none
- hardcode #0a0e17 in .modal inputs too
2026-08-13 18:45:45 +01:00
jp
7c983198e9 Force dark input backgrounds with hardcoded #0a0e17
- replace var(--bg-surface) with literal #0a0e17 in input CSS
- add -webkit-appearance:none to prevent native widget override
- apply to both main and .modal input rules
2026-08-13 18:40:22 +01:00
jp
1b6bc9f057 Fix input background override
- Remove stale inline light-mode styles from index.html
- Let cyber theme CSS control all input backgrounds
2026-08-13 18:34:34 +01:00
jp
26d2bf0e46 Update title to 'txt3 Voicemail' with envelope icon 2026-08-13 18:32:49 +01:00
jp
489241b798 Sync React frontend into git
- Replace stale TanStack Router scaffold with working react-router-dom app
- Add all 9 page components + cyber theme CSS
- Remove routeTree.gen.ts, add index.css, query.ts
2026-08-13 18:22:03 +01:00
jp
49bdd342c2 Remove node_modules from git; add to .gitignore 2026-08-13 17:42:59 +01:00
jp
0917366cdf Separate JSON API backend (vm_api.py) + React+TanStack frontend scaffold
- vm_api.py: pure FastAPI JSON API on :8098 with CORS
- vm-api.service: systemd unit for API (replaces inline HTML vm_web.py for frontend)
- vm_web.py: kept intact as fallback; Apache now proxies /api/ -> :8098
- frontend/: Vite + React + TanStack Query scaffold
- Apache vhost updated: DocumentRoot -> frontend/dist, /api/ proxy, SPA fallback
- All original HTML pages still functional via :8099 during transition
2026-08-13 17:42:33 +01:00