- InlineField component + useInlineEdit composable for Odoo-style dblclick editing - Client search by name, account ID, and legacy_customer_id (or_filters) - SMS/Email notification panel on ContactCard via n8n webhooks - Ticket reply thread via Communication docs - All migration scripts (51 files) now tracked - Client portal and field tech app added to monorepo - README rewritten with full feature list, migration summary, architecture - CHANGELOG updated with all recent work - ROADMAP updated with current completion status - Removed hardcoded tokens from docs (use $ERP_SERVICE_TOKEN) - .gitignore updated (docker/, .claude/, exports/, .quasar/) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
54 lines
1.6 KiB
YAML
54 lines
1.6 KiB
YAML
# Traefik dynamic route: client.gigafibre.ca → ERPNext (no Authentik)
|
|
#
|
|
# Purpose: Customer portal accessible without SSO.
|
|
# Customers log in via ERPNext's built-in /login page.
|
|
#
|
|
# Deploy: copy to /opt/traefik/dynamic/ on 96.125.196.67
|
|
# scp traefik-client-portal.yml root@96.125.196.67:/opt/traefik/dynamic/
|
|
# (Traefik auto-reloads dynamic config — no restart needed)
|
|
#
|
|
# DNS: *.gigafibre.ca wildcard already resolves to 96.125.196.67
|
|
# TLS: Let's Encrypt auto-provisions cert for client.gigafibre.ca
|
|
|
|
http:
|
|
routers:
|
|
# Main portal router — NO authentik middleware
|
|
client-portal:
|
|
rule: "Host(`client.gigafibre.ca`)"
|
|
entryPoints:
|
|
- web
|
|
- websecure
|
|
service: client-portal-svc
|
|
tls:
|
|
certResolver: letsencrypt
|
|
# Explicitly NO middlewares — customers auth via ERPNext /login
|
|
|
|
# Block /desk access for portal users
|
|
client-portal-block-desk:
|
|
rule: "Host(`client.gigafibre.ca`) && PathPrefix(`/desk`)"
|
|
entryPoints:
|
|
- web
|
|
- websecure
|
|
service: client-portal-svc
|
|
middlewares:
|
|
- portal-redirect-home
|
|
tls:
|
|
certResolver: letsencrypt
|
|
priority: 200
|
|
|
|
middlewares:
|
|
# Redirect /desk attempts to portal home
|
|
portal-redirect-home:
|
|
redirectRegex:
|
|
regex: ".*"
|
|
replacement: "https://client.gigafibre.ca/me"
|
|
permanent: false
|
|
|
|
services:
|
|
# Same ERPNext frontend container, unique service name to avoid
|
|
# conflicts with Docker-label-defined services
|
|
client-portal-svc:
|
|
loadBalancer:
|
|
servers:
|
|
- url: "http://erpnext-frontend-1:8080"
|