stefankoelle
3edcc99c61
related contact details
2026-08-10 23:20:42 +02:00
stefankoelle
7b1acbb8bb
related mapping
2026-08-10 22:54:44 +02:00
stefankoelle
83eb8d3544
ui: contact detail box layout
2026-08-07 19:03:02 +02:00
stefankoelle
a5f623d75c
revert: JSON-LD entfernt (nutzlos hinter Authelia)
...
Die Seiten sind hinter Authelia geschützt, Google kann sie nicht
crawlen. JSON-LD bringt dort nichts.
2026-08-07 16:29:36 +02:00
stefankoelle
036122ab20
feat: JSON-LD Structured Data + Maps-Icon für Adressen
...
- JSON-LD im <head> mit schema.org PostalAddress für Google Rich Results
- Maps SVG-Icon (Pin) neben Adressen wenn Straße + Ort vorhanden
- Link öffnet Google Maps Suche im neuen Tab
2026-08-07 16:16:20 +02:00
stefankoelle
5abeb2e9d2
ui: Gruppen-Tags auf Kontakt-Detailseite wie Sidebar-Cloud
...
Hover-Effekt und einheitliches Padding für Gruppen-Tags auf der
Kontakt-Detailseite, identisch zur Sidebar-Cloud.
2026-08-07 16:10:07 +02:00
stefankoelle
5bd06d268b
ui: Gruppen-Tags auf Kontakt-Detailseite verlinken
...
Gruppen-Tags auf der Kontakt-Detailseite sind jetzt klickbar und
führen zur Gruppensuche (/search?group=<uid>).
2026-08-07 16:07:50 +02:00
stefankoelle
94a279f207
feat: iCloud-Kontaktgruppen synchronisieren und API-Endpunkte hinzufügen
...
Erkennt iCloud-Gruppen (vCards mit X-ADDRESSBOOKSERVER-KIND:group) beim
CardDAV-Sync und speichert sie separat in den neuen Tabellen groups und
group_members statt als Kontakte in die contacts-Tabelle.
Änderungen:
- sql/schema.sql: Neue Tabellen groups + group_members (FK CASCADE)
- src/vcard_parser.py: is_group_vcard() + parse_group() Funktionen
- src/db.py: DB-Funktionen für Gruppen (upsert, delete, replace, get)
- src/sync.py: _classify_vcards() trennt Gruppen von Kontakten
- src/api/schemas.py: Pydantic-Modelle für Gruppen-Responses
- src/api/main.py: 3 neue Endpunkte (/api/groups, /{id}, /{id}/members)
- src/api/templates/contact.html: Gruppen-Section im Kontakt-Detail
- README.md + SPEC.md: Dokumentation aktualisiert
2026-08-07 15:18:44 +02:00
stefankoelle
34860e8ae4
birthday unknown year filter
2026-08-07 13:34:18 +02:00
stefankoelle
3f5a8dff91
web contact details with tiles
2026-08-05 22:19:08 +02:00
stefankoelle
cbf4020a3e
web custom links city placeholder
2026-08-05 20:47:00 +02:00
stefankoelle
e54891f4ed
web custom links position exactly
2026-08-05 20:43:09 +02:00
stefankoelle
ed900eed74
web custom links position box
2026-08-05 20:38:50 +02:00
stefankoelle
a2035b658b
web custom links try layout again
2026-08-05 20:32:22 +02:00
stefankoelle
5ca8eeeaa7
web custom links urlquote
2026-08-05 20:27:38 +02:00
stefankoelle
ed9bf5f062
web custom links
2026-08-05 20:24:09 +02:00
stefankoelle
895027d8d2
web clickable photo centered
2026-08-05 17:50:29 +02:00
stefankoelle
4155d029bb
web clickable photo
2026-08-05 17:41:49 +02:00
stefankoelle
be7832ea31
web badge on top right
2026-08-05 17:06:41 +02:00
stefankoelle
082a7c5b38
web badge even smaller
2026-08-05 16:59:37 +02:00
stefankoelle
3779c4c73a
web badge smaller
2026-08-05 16:48:06 +02:00
stefankoelle
9458a88122
web admin mode
2026-08-05 16:44:10 +02:00
stefankoelle
c2d5ae45a2
web photo layout update
2026-08-05 16:33:45 +02:00
stefankoelle
a1d4c9eacb
sync photo and display photo
2026-08-05 15:56:16 +02:00
stefankoelle
8a653ca395
sync social_profiles fix
2026-08-05 15:44:37 +02:00
stefankoelle
85f6e79a7f
web layout fix 3
2026-08-05 15:10:44 +02:00
stefankoelle
a39fe83fe1
web layout fix 2
2026-08-05 07:51:43 +02:00
stefankoelle
2c10d24985
web layout fix
2026-08-05 07:33:14 +02:00
stefankoelle
55a4721da1
web header contact details
2026-08-05 07:13:59 +02:00
stefankoelle
560b38b6a3
web header dashboard
2026-08-05 07:01:32 +02:00
stefankoelle
1561a59627
web header
2026-08-05 06:54:36 +02:00
stefankoelle
cf3563124f
web dashboard
2026-08-05 05:56:28 +02:00
stefankoelle
af922f23ba
LICENSE
2026-08-05 02:29:18 +02:00
stefankoelle
5ed6210f8f
favicon
2026-08-05 02:20:41 +02:00
stefankoelle
50f5dcb1d9
web detail fix
2026-08-05 02:09:37 +02:00
stefankoelle
7ff0ad5570
web detail view
2026-08-05 02:07:05 +02:00