stefankoelle
debaf7dd62
related contact detail
2026-08-10 23:55:23 +02:00
stefankoelle
00e4e54599
related fix parser
2026-08-10 23:29:44 +02:00
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
e966157f15
fix: update TemplateResponse calls for Starlette 0.31+ compatibility
2026-08-10 20:09:24 +02:00
stefankoelle
2dd93d8d68
chore: update dependencies and add Renovate config
2026-08-10 19:52:58 +02:00
stefankoelle
fcaa74f774
demo showcase
2026-08-10 17:42:13 +02:00
stefankoelle
28bfbc01bf
screenshot
2026-08-10 17:35:24 +02:00
stefankoelle
1b4892109a
fix prefix anomaly
2026-08-07 23:43:44 +02:00
stefankoelle
7bf3a0dabc
contact detail fix fullname builder
2026-08-07 23:39:22 +02:00
stefankoelle
047766df86
birthday testmail when most contacts
2026-08-07 21:37:50 +02:00
stefankoelle
5e1a2b0b92
birthday mail for each account
2026-08-07 21:31:53 +02:00
stefankoelle
b9c6c99120
sync healthcheck documentation
2026-08-07 21:01:48 +02:00
stefankoelle
94fcd5f685
sync healthcheck feature
2026-08-07 20:56:12 +02:00
stefankoelle
838619e392
feature in roadmap
2026-08-07 20:31:40 +02:00
stefankoelle
323432eb14
ui: sorting upcoming birthdays
2026-08-07 19:59:24 +02:00
stefankoelle
1caab5ebf0
ui: sorting
2026-08-07 19:58:09 +02:00
stefankoelle
83eb8d3544
ui: contact detail box layout
2026-08-07 19:03:02 +02:00
stefankoelle
7e59451d47
ui: special searches on mobile
2026-08-07 19:00:59 +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
565cd15b87
ui: Sidebar 380px breit, Special Searches als Cloud
...
Sidebar-Breite von 280px auf 380px erhöht. Special Searches nutzen
jetzt dasselbe flex-wrap Tag-Layout wie die Gruppen-Cloud.
2026-08-07 16:04:53 +02:00
stefankoelle
30d8203d55
lint preferences
2026-08-07 16:03:52 +02:00
stefankoelle
aa01f47d92
web group cloud
2026-08-07 15:54:34 +02:00
stefankoelle
57739f99a4
fix: group_members beim Kontakt-Löschen bereinigen
...
Neue Funktion delete_group_members_by_uids in db.py entfernt
Member-Einträge aus group_members wenn ein Kontakt gelöscht wird.
Nutzt JOIN über groups Tabelle für Account-Scoping.
Doku in README.md aktualisiert.
2026-08-07 15:33:31 +02:00
stefankoelle
cccb4217b0
fix: Code-Review-Korrekturen für PR #1
...
- Cross-Tenant-Datenleck in get_group_members: Account-Filter im
LEFT JOIN contacts hinzugefügt (c.account = g.account)
- CROSS JOIN in get_group durch sauberen JOIN ON g.id = gm.group_id
ersetzt
- Leere Gruppen werden jetzt gespeichert (parse_group gibt auch
leere member_uids-Listen zurück)
- ON DELETE CASCADE Doku korrigiert: CASCADE greift nur beim Löschen
einer Gruppe, nicht beim Löschen eines Kontakts
- Migration für Bestands-DBs in README dokumentiert (sync_state
leeren für vollen Re-Sync)
- Index idx_group_members_member_uid für get_groups_for_contact
- Unbenutzte is_admin-Variablen in neuen Endpoints bereinigt
2026-08-07 15:30:17 +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
38b03a2c8a
mail layout imp 7
2026-08-07 15:04:51 +02:00
stefankoelle
0e788a3b9d
mail layout imp 6
2026-08-07 14:56:03 +02:00
stefankoelle
3dfff404b9
sidebar improve
2026-08-07 14:51:00 +02:00
stefankoelle
5da259141d
mail layout imp 5
2026-08-07 14:48:14 +02:00
stefankoelle
6d6a8cf9e0
dashboard sidebar
2026-08-07 14:45:04 +02:00
stefankoelle
d6d3ceaa83
mail layout imp 4
2026-08-07 14:41:55 +02:00
stefankoelle
954f1fbd3a
mail layout imp 3
2026-08-07 14:36:04 +02:00
stefankoelle
e34a8ee64b
mail layout imp 2
2026-08-07 14:25:52 +02:00
stefankoelle
8c1f421d39
mail layout improvements
2026-08-07 14:18:56 +02:00
stefankoelle
32c6bf6908
also on web
2026-08-07 13:57:20 +02:00
stefankoelle
081fe9bfa0
some fixes
2026-08-07 13:56:58 +02:00
stefankoelle
14b2101b9f
unknown year dashboard fix
2026-08-07 13:41:35 +02:00
stefankoelle
af41f45a98
mail test method docker-compose mapping
2026-08-07 13:38:12 +02:00
stefankoelle
34860e8ae4
birthday unknown year filter
2026-08-07 13:34:18 +02:00
stefankoelle
5cdefff6f5
timezone config fix
2026-08-07 13:18:33 +02:00
stefankoelle
d458c58c64
timezone config docker-compose
2026-08-07 13:14:04 +02:00
stefankoelle
04f464c7bb
timezone config
2026-08-07 13:06:48 +02:00
stefankoelle
8eaac47ef6
mail test method
2026-08-07 12:39:21 +02:00
stefankoelle
e3ca295ebd
mail only when some has birthday
2026-08-07 11:47:57 +02:00
stefankoelle
744c71400d
sync fullsync fix 2
2026-08-06 22:15:25 +02:00
stefankoelle
c457e5a78a
sync fullsync fix after update with get
2026-08-06 22:01:51 +02:00
stefankoelle
15a6a6d855
sync fix update with get
2026-08-06 19:36:24 +02:00
stefankoelle
a9d0727d76
mail new layout
2026-08-06 18:58:39 +02:00
stefankoelle
15fc880d56
sync delta logging
2026-08-05 23:29:57 +02:00
stefankoelle
25d1606fb0
web dashboard special links fix 3
2026-08-05 22:56:54 +02:00
stefankoelle
9d4d0b1306
web dashboard special links fix 2
2026-08-05 22:49:28 +02:00
stefankoelle
e1805d5ba8
web dashboard special links fix
2026-08-05 22:42:24 +02:00
stefankoelle
ddb65055d8
web dashboard special links
2026-08-05 22:35:34 +02:00
stefankoelle
3f5a8dff91
web contact details with tiles
2026-08-05 22:19:08 +02:00
stefankoelle
d42dfef117
sync retry logic
2026-08-05 21:24:07 +02:00
stefankoelle
7cab1df120
sync retry after logging
2026-08-05 21:18:24 +02:00
stefankoelle
0e915b2db9
bugfix db sync
2026-08-05 21:08:54 +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
eacdefaacf
web dashboard birthday with photo
2026-08-05 17:28:07 +02:00
stefankoelle
0d71ccd3a6
web dashboard birthday layout like search
2026-08-05 17:19:23 +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
a08482dfd0
fix bug
2026-08-05 16:52:48 +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
dcb7733383
sync more logging 2
2026-08-05 16:05:54 +02:00
stefankoelle
fc6930d2ae
sync more logging when error
2026-08-05 16:02:20 +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
54a0624c17
last sync with changes no duplicate
2026-08-05 15:32:23 +02:00
stefankoelle
d9d22011ca
fix new db sync bug
2026-08-05 15:27:49 +02:00
stefankoelle
3017be812d
web mark birthdays that are today
2026-08-05 15:23:12 +02:00
stefankoelle
4f27cc596e
last sync with changes on dashboard
2026-08-05 15:20:05 +02:00
stefankoelle
12e36b2f17
fix db sync bugs
2026-08-05 15:10:55 +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
8edc339b29
db full_name fallback
2026-08-05 06:32:35 +02:00
stefankoelle
1013fe1748
remove dump carddav
2026-08-05 06:24:58 +02:00
stefankoelle
375937d8c5
web display age
2026-08-05 06:12:59 +02:00
stefankoelle
447528b5ff
dump carddav
2026-08-05 06:10: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
4988526f46
Update README.md and more
2026-08-05 02:26:01 +02:00
stefankoelle
8bd9dc1c03
AGENTS.md
2026-08-05 02:23:10 +02:00