Skip to content
Open

Staging #1087

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
410 commits
Select commit Hold shift + click to select a range
6732f8b
Merge pull request #997 from geops/cms/customer/trenord
SelM2610 Nov 11, 2025
7af0ffa
Create Customer “s-bahn-stuttgart”
SelM2610 Nov 11, 2025
9ef44d5
Merge pull request #998 from geops/cms/customer/s-bahn-stuttgart
SelM2610 Nov 11, 2025
c223ca8
Create Customer “s-bahn-hamburg”
SelM2610 Nov 11, 2025
57062d2
Merge pull request #999 from geops/cms/customer/s-bahn-hamburg
SelM2610 Nov 11, 2025
56ec07a
Update Customer “sbb”
SelM2610 Nov 11, 2025
266a4e8
Merge pull request #1001 from geops/cms/customer/sbb
SelM2610 Nov 11, 2025
8c4d0bf
Update Customer “rbs”
SelM2610 Nov 11, 2025
e9c0f17
Merge pull request #1002 from geops/cms/customer/rbs
SelM2610 Nov 11, 2025
7715e29
Create Customer “chemins-de-fer-du-jura”
SelM2610 Nov 11, 2025
282cf94
Merge pull request #1003 from geops/cms/customer/chemins-de-fer-du-jura
SelM2610 Nov 11, 2025
b16b7de
Create Customer “sob”
SelM2610 Nov 11, 2025
ee5231b
Merge pull request #1004 from geops/cms/customer/sob
SelM2610 Nov 11, 2025
176d1d6
Create Customer “tmr-sa”
SelM2610 Nov 11, 2025
085dc49
Merge pull request #1005 from geops/cms/customer/tmr-sa
SelM2610 Nov 11, 2025
1ae30f2
Create Customer “szu-ag”
SelM2610 Nov 11, 2025
4fd3b6b
Merge pull request #1006 from geops/cms/customer/szu-ag
SelM2610 Nov 11, 2025
d394c87
Update Customer “verkehrsverbund-luzern-vvl”
SelM2610 Nov 11, 2025
34f915e
Merge pull request #1007 from geops/cms/customer/verkehrsverbund-luze…
SelM2610 Nov 11, 2025
06547bc
Create Customer “chur-bus”
SelM2610 Nov 11, 2025
56038b3
Merge pull request #1008 from geops/cms/customer/chur-bus
SelM2610 Nov 11, 2025
525cd3e
Create Customer “engadin-bus”
SelM2610 Nov 11, 2025
af682d5
Merge pull request #1009 from geops/cms/customer/engadin-bus
SelM2610 Nov 11, 2025
734f524
Create Customer “sti-bus-ag”
SelM2610 Nov 11, 2025
50574bb
Merge pull request #1010 from geops/cms/customer/sti-bus-ag
SelM2610 Nov 11, 2025
9404875
Update Customer “grindwald”
SelM2610 Nov 11, 2025
da5454d
Merge pull request #1011 from geops/cms/customer/grindwald
SelM2610 Nov 11, 2025
e77d019
Create Customer “busbetrieb-olten-gösgen-gäu-ag”
SelM2610 Nov 11, 2025
90458d3
Merge pull request #1012 from geops/cms/customer/busbetrieb-olten-gös…
SelM2610 Nov 11, 2025
1e3a445
Create Customer “stadtbus-winterthur”
SelM2610 Nov 11, 2025
9d645a8
Merge pull request #1013 from geops/cms/customer/stadtbus-winterthur
SelM2610 Nov 11, 2025
bb69afa
Create Customer “vzo”
SelM2610 Nov 11, 2025
be56b3c
Merge pull request #1014 from geops/cms/customer/vzo
SelM2610 Nov 11, 2025
fc793eb
Create Customer “rhb”
SelM2610 Nov 11, 2025
9e706ad
Merge pull request #1015 from geops/cms/customer/rhb
SelM2610 Nov 11, 2025
0d90374
Update Customer “nvbw”
SelM2610 Nov 11, 2025
2950389
Merge pull request #1016 from geops/cms/customer/nvbw
SelM2610 Nov 11, 2025
da93d85
Create Customer “nasa-gmbh”
SelM2610 Nov 11, 2025
7c9ca6b
Merge pull request #1017 from geops/cms/customer/nasa-gmbh
SelM2610 Nov 11, 2025
cd17e11
Update Customer “vbg”
SelM2610 Nov 11, 2025
3aad784
Merge pull request #1018 from geops/cms/customer/vbg
SelM2610 Nov 11, 2025
ab5c952
Delete “public/images/customer/bazl.jpg”
SelM2610 Nov 18, 2025
82738af
Update Customer “bazl”
SelM2610 Nov 18, 2025
489f7a1
Merge pull request #1020 from geops/cms/customer/bazl
SelM2610 Nov 18, 2025
277454b
Update Customer “bls”
SelM2610 Nov 18, 2025
7a96fe1
Merge pull request #1021 from geops/cms/customer/bls
SelM2610 Nov 18, 2025
8388d7b
Delete “public/images/customer/logo_busbetrieb_olten_gösgen_gäu.svg”
SelM2610 Nov 18, 2025
002035e
Update Customer “busbetrieb-olten-gösgen-gäu-ag”
SelM2610 Nov 18, 2025
a384e44
Merge pull request #1022 from geops/cms/customer/busbetrieb-olten-gös…
SelM2610 Nov 18, 2025
bf127e7
Delete “public/images/customer/graubünden.jpg”
SelM2610 Nov 18, 2025
ad788ce
Update Customer “canton-grisons”
SelM2610 Nov 18, 2025
92b114b
Merge pull request #1023 from geops/cms/customer/canton-grisons
SelM2610 Nov 18, 2025
34a4533
Delete “public/images/customer/kanton-basel-stadt.jpg”
SelM2610 Nov 18, 2025
3b3d5c6
Update Customer “canton-of-basel-stadt”
SelM2610 Nov 18, 2025
b1a1a8c
Merge pull request #1024 from geops/cms/customer/canton-of-basel-stadt
SelM2610 Nov 18, 2025
4ee8cc3
Delete “public/images/customer/logo-be.svg”
SelM2610 Nov 18, 2025
a2bb88c
Update Customer “canton-of-bern”
SelM2610 Nov 18, 2025
be38640
Merge pull request #1025 from geops/cms/customer/canton-of-bern
SelM2610 Nov 18, 2025
6bbea38
Delete “public/images/customer/luzern.jpg”
SelM2610 Nov 18, 2025
2ebdc8e
Update Customer “canton-of-lucerne”
SelM2610 Nov 18, 2025
b256e98
Merge pull request #1026 from geops/cms/customer/canton-of-lucerne
SelM2610 Nov 18, 2025
491e701
Delete “public/images/customer/solothurn.jpg”
SelM2610 Nov 18, 2025
f4e114d
Update Customer “canton-of-solothurn”
SelM2610 Nov 18, 2025
f0b7e43
Merge pull request #1027 from geops/cms/customer/canton-of-solothurn
SelM2610 Nov 18, 2025
aae00c2
Update Customer “nvbw”
SelM2610 Nov 18, 2025
d62715a
Merge pull request #1028 from geops/cms/customer/nvbw
SelM2610 Nov 18, 2025
987671f
Delete “public/images/customer/neuchatel.jpg”
SelM2610 Nov 18, 2025
9303506
Update Customer “republic-and-canton-of-neuchâtel”
SelM2610 Nov 18, 2025
058defd
Merge pull request #1029 from geops/cms/customer/republic-and-canton-…
SelM2610 Nov 18, 2025
7f76770
Delete “public/images/customer/logo_trans.png”
SelM2610 Nov 18, 2025
a650863
Update Customer “national-administration-principality-of-liechtenstein”
SelM2610 Nov 18, 2025
adf545d
Merge pull request #1030 from geops/cms/customer/national-administrat…
SelM2610 Nov 18, 2025
5c996a6
Delete “public/images/customer/client_lv_fuerstentum.png”
SelM2610 Nov 18, 2025
ca4b74d
Delete “public/images/customer/tessin.png”
SelM2610 Nov 18, 2025
2140c84
Update Customer “republic-and-canton-of-ticino”
SelM2610 Nov 18, 2025
fa8a35a
Merge pull request #1031 from geops/cms/customer/republic-and-canton-…
SelM2610 Nov 18, 2025
9e2efc9
Delete Customer “rvf-1”
SelM2610 Nov 18, 2025
2f7c3f6
Update Customer “rvf”
SelM2610 Nov 18, 2025
f80272c
Merge pull request #1033 from geops/cms/customer/rvf
SelM2610 Nov 18, 2025
6cbade6
Delete “public/images/customer/s-bahn-hamburg3276.logowik.com.webp”
SelM2610 Nov 18, 2025
77bb052
Update Customer “s-bahn-hamburg”
SelM2610 Nov 18, 2025
8e0097f
Merge pull request #1034 from geops/cms/customer/s-bahn-hamburg
SelM2610 Nov 18, 2025
f8ce6f3
Create Customer “allianz-swiss-pass”
SelM2610 Nov 20, 2025
499da30
Merge pull request #1035 from geops/cms/customer/allianz-swiss-pass
SelM2610 Nov 20, 2025
f186bb1
Add customer logo carousel to front page.
friedjoff Nov 25, 2025
cef3654
Update Cases “tarifverbundkarte/index”
SelM2610 Dec 4, 2025
27e4fc8
Update Cases “tarifverbundkarte/index”
SelM2610 Dec 4, 2025
15ed358
Update Cases “tarifverbundkarte/index”
SelM2610 Dec 4, 2025
1d6f43b
Update Cases “tarifverbundkarte/index”
SelM2610 Dec 4, 2025
a3a7c2c
Merge pull request #1059 from geops/cms/cases/tarifverbundkarte/index
SelM2610 Dec 4, 2025
1bca562
Create Cases “boden4web/index”
SelM2610 Dec 4, 2025
f0b11e4
Update Cases “boden4web/index”
SelM2610 Dec 4, 2025
20f3251
Merge pull request #1060 from geops/cms/cases/boden4web/index
SelM2610 Dec 4, 2025
75d1631
Create Customer “sbb-real-estate”
SelM2610 Dec 4, 2025
2346bb8
Merge pull request #1061 from geops/cms/customer/sbb-real-estate
SelM2610 Dec 4, 2025
4bd85fd
Create Cases “propcms/index”
SelM2610 Dec 4, 2025
2cf8058
Merge pull request #1062 from geops/cms/cases/propcms/index
SelM2610 Dec 4, 2025
67adad1
Update Cases “gb-karte/index”
SelM2610 Dec 4, 2025
de1ffc3
Update Cases “gb-karte/index”
SelM2610 Dec 4, 2025
3f2c6fb
Update Cases “gb-karte/index”
SelM2610 Dec 4, 2025
1dddd78
Merge pull request #1063 from geops/cms/cases/gb-karte/index
SelM2610 Dec 4, 2025
33a6a0f
Create Cases “puenktlichkeitskarte/index”
SelM2610 Dec 10, 2025
6b281f8
Update Cases “puenktlichkeitskarte/index”
SelM2610 Dec 10, 2025
1c3695d
Merge pull request #1064 from geops/cms/cases/puenktlichkeitskarte/index
SelM2610 Dec 10, 2025
dcf875d
fix images for cases
friedjoff Dec 10, 2025
f52339e
Update Cases “gb-karte/index”
SelM2610 Dec 10, 2025
347866f
Update Cases “gb-karte/index”
SelM2610 Dec 10, 2025
901d831
Update Cases “gb-karte/index”
SelM2610 Dec 10, 2025
37adcb7
Merge pull request #1065 from geops/cms/cases/gb-karte/index
SelM2610 Dec 10, 2025
8d867f4
Delete Cases “boden4web/index”
SelM2610 Dec 10, 2025
7dd62ab
Update Cases “international-connections/index”
SelM2610 Dec 10, 2025
d436a5a
Update Cases “international-connections/index”
SelM2610 Dec 10, 2025
40cd064
Merge pull request #1067 from geops/cms/cases/international-connectio…
SelM2610 Dec 10, 2025
b9c212e
Update Cases “nvbw-connection-protection/index”
SelM2610 Dec 10, 2025
0253e48
Update Cases “nvbw-connection-protection/index”
SelM2610 Dec 10, 2025
8b28436
Merge pull request #1068 from geops/cms/cases/nvbw-connection-protect…
SelM2610 Dec 10, 2025
636213f
Update Cases “s-bahn-muenchen/index”
SelM2610 Dec 10, 2025
e84fdaf
Merge pull request #1069 from geops/cms/cases/s-bahn-muenchen/index
SelM2610 Dec 10, 2025
0e539da
Update Cases “puenktlichkeitskarte/index”
SelM2610 Dec 10, 2025
91b40c9
Merge pull request #1070 from geops/cms/cases/puenktlichkeitskarte/index
SelM2610 Dec 10, 2025
bc29ec8
Update Cases “s-bahn-muenchen/index”
SelM2610 Dec 10, 2025
9b53a1c
Merge pull request #1071 from geops/cms/cases/s-bahn-muenchen/index
SelM2610 Dec 10, 2025
bfc1bfe
Update Cases “propcms/index”
SelM2610 Dec 10, 2025
bdfabab
Update Cases “propcms/index”
SelM2610 Dec 10, 2025
9f70a91
Merge pull request #1072 from geops/cms/cases/propcms/index
SelM2610 Dec 10, 2025
67104c5
Update Cases “propcms/index”
SelM2610 Dec 10, 2025
7bc9f7a
Update Cases “propcms/index”
SelM2610 Dec 10, 2025
7510894
Merge pull request #1073 from geops/cms/cases/propcms/index
SelM2610 Dec 10, 2025
4a4ca43
Update Cases “puenktlichkeitskarte/index”
SelM2610 Dec 10, 2025
bc537fb
Update Cases “puenktlichkeitskarte/index”
SelM2610 Dec 10, 2025
34b485f
Merge pull request #1074 from geops/cms/cases/puenktlichkeitskarte/index
SelM2610 Dec 10, 2025
b4bd82d
Create Cases “amo-karte/index”
SelM2610 Dec 10, 2025
699acab
Merge pull request #1075 from geops/cms/cases/amo-karte/index
SelM2610 Dec 10, 2025
d33d18c
Create Cases “alma/index”
SelM2610 Dec 10, 2025
f6b956d
Update Cases “alma/index”
SelM2610 Dec 10, 2025
f4a73f6
Merge pull request #1076 from geops/cms/cases/alma/index
SelM2610 Dec 10, 2025
a4aaeae
Create Cases “mapset/index”
SelM2610 Dec 11, 2025
30ba75a
Update Cases “mapset/index”
SelM2610 Dec 11, 2025
08e8ea3
Merge pull request #1077 from geops/cms/cases/mapset/index
SelM2610 Dec 11, 2025
f95d1b4
fix image paths
friedjoff Dec 15, 2025
e33a59f
try slug for case images
friedjoff Dec 15, 2025
c1c5625
fix image paths
friedjoff Dec 15, 2025
91c9ef2
hide verbose logs
friedjoff Dec 15, 2025
d060c7e
Create Cases “insa/index”
SelM2610 Dec 22, 2025
ec3e21f
Update Cases “insa/index”
SelM2610 Dec 22, 2025
c9be8c9
Merge pull request #1080 from geops/cms/cases/insa/index
SelM2610 Dec 22, 2025
205008e
Create Cases “sts-webkarte/index”
SelM2610 Dec 22, 2025
7767ca5
Update Cases “sts-webkarte/index”
SelM2610 Dec 22, 2025
78dc4db
Merge pull request #1081 from geops/cms/cases/sts-webkarte/index
SelM2610 Dec 22, 2025
3a1073c
Create Cases “trafimage/index”
SelM2610 Dec 23, 2025
c26d561
Update Cases “trafimage/index”
SelM2610 Dec 23, 2025
39c1378
Merge pull request #1084 from geops/cms/cases/trafimage/index
SelM2610 Dec 23, 2025
acfc8d2
Create Cases “treeapp/index”
SelM2610 Dec 23, 2025
f658449
Update Cases “treeapp/index”
SelM2610 Dec 23, 2025
9de68cd
Merge pull request #1085 from geops/cms/cases/treeapp/index
SelM2610 Dec 23, 2025
c6ba93a
Add customer logo carousel to front page.
friedjoff Nov 25, 2025
3788b20
fix: use caroussel
oterral Jan 13, 2026
cbafae3
Merge remote-tracking branch 'origin/main' into staging
oterral Jan 13, 2026
16202b7
fix: make cutsomer field optional
oterral Jan 13, 2026
5b05179
fix: make cutsomer field optional
oterral Jan 13, 2026
353c157
fix: make cutsomer field optional
oterral Jan 13, 2026
8c6269f
fix: add caroussel customers
oterral Jan 13, 2026
01a742b
fix: add customers
oterral Jan 13, 2026
8e28a1b
fix: add customers
oterral Jan 13, 2026
d25de7a
fix: displa ycaroussel
oterral Jan 13, 2026
20cc636
fix: improve size!
oterral Jan 13, 2026
d71d768
fix: increase caroussel image size
oterral Jan 19, 2026
36e2b9e
Update Cases “amo-karte/index”
SelM2610 Jan 20, 2026
eeda4a1
Merge pull request #1092 from geops/cms/cases/amo-karte/index
SelM2610 Jan 20, 2026
f36b65b
Update Cases “amo-karte/index”
SelM2610 Jan 20, 2026
016603c
Update Cases “amo-karte/index”
SelM2610 Jan 20, 2026
70faf23
Merge pull request #1093 from geops/cms/cases/amo-karte/index
SelM2610 Jan 20, 2026
6417ff3
Update Cases “amo-karte/index”
SelM2610 Jan 20, 2026
7bc1d16
Update Cases “amo-karte/index”
SelM2610 Jan 20, 2026
69381b7
Merge pull request #1094 from geops/cms/cases/amo-karte/index
SelM2610 Jan 20, 2026
aec5106
Update Cases “amo-karte/index”
SelM2610 Jan 20, 2026
a173d76
Update Cases “amo-karte/index”
SelM2610 Jan 20, 2026
e00c668
Merge pull request #1095 from geops/cms/cases/amo-karte/index
SelM2610 Jan 20, 2026
63acfe1
Update Cases “gb-karte/index”
SelM2610 Jan 20, 2026
e480271
Update Cases “gb-karte/index”
SelM2610 Jan 20, 2026
88ae6f5
Merge pull request #1096 from geops/cms/cases/gb-karte/index
SelM2610 Jan 20, 2026
4ee83e8
Update Cases “gb-karte/index”
SelM2610 Jan 20, 2026
6e93a21
Merge pull request #1097 from geops/cms/cases/gb-karte/index
SelM2610 Jan 20, 2026
8b51971
Update Cases “gb-karte/index”
SelM2610 Jan 20, 2026
d1b87fc
Merge pull request #1098 from geops/cms/cases/gb-karte/index
SelM2610 Jan 20, 2026
223b2f3
Update Cases “nvbw-connection-protection/index”
SelM2610 Jan 20, 2026
272b372
Update Cases “nvbw-connection-protection/index”
SelM2610 Jan 20, 2026
a033d7b
Update Cases “gb-karte/index”
SelM2610 Jan 20, 2026
9153683
Update Cases “gb-karte/index”
SelM2610 Jan 20, 2026
74f2c4f
Update Cases “nvbw-connection-protection/index”
SelM2610 Jan 21, 2026
97baf2e
Merge pull request #1099 from geops/cms/cases/nvbw-connection-protect…
SelM2610 Jan 21, 2026
7c0d5af
fix: use basic img tag
oterral Jan 21, 2026
e351b5f
Update Cases “alma/index”
SelM2610 Jan 21, 2026
7befad0
Merge pull request #1101 from geops/cms/cases/alma/index
SelM2610 Jan 21, 2026
eafa793
fix: add description for logo gield
oterral Jan 21, 2026
7507cab
fix: add description for logo field
oterral Jan 21, 2026
dd21015
Delete “public/images/customer/bav.png”
SelM2610 Jan 21, 2026
90207f3
Update Customer “fot”
SelM2610 Jan 21, 2026
7a256e1
Merge pull request #1102 from geops/cms/customer/fot
SelM2610 Jan 21, 2026
fb0c29b
Delete “public/images/customer/bazl_neu.png”
SelM2610 Jan 21, 2026
bd04080
Update Customer “bazl”
SelM2610 Jan 21, 2026
fe06d4b
Merge pull request #1103 from geops/cms/customer/bazl
SelM2610 Jan 21, 2026
05bf7aa
Delete “public/images/customer/bazl_neu_2.png”
SelM2610 Jan 21, 2026
ae2231b
Update Customer “fot”
SelM2610 Jan 21, 2026
d5310a6
Merge pull request #1104 from geops/cms/customer/fot
SelM2610 Jan 21, 2026
1defcfe
Delete “public/images/cases/wo-gilt-welches-öv-abo-unsere-lösung-visu…
SelM2610 Jan 21, 2026
dece784
Update Cases “gb-karte/index”
SelM2610 Jan 21, 2026
9d4d8bc
Merge pull request #1100 from geops/cms/cases/gb-karte/index
SelM2610 Jan 21, 2026
3d642a6
Delete “public/images/cases/connection-fuse-for-the-nvbw/neu.png”
SelM2610 Jan 21, 2026
1351677
Update Cases “nvbw-connection-protection/index”
SelM2610 Jan 21, 2026
c9fa56f
Update Cases “nvbw-connection-protection/index”
SelM2610 Jan 21, 2026
6715e92
Merge pull request #1105 from geops/cms/cases/nvbw-connection-protect…
SelM2610 Jan 21, 2026
c3bac48
Update Cases “mapset/index”
SelM2610 Jan 21, 2026
9cb17d2
Update Cases “mapset/index”
SelM2610 Jan 21, 2026
35e01db
Merge pull request #1106 from geops/cms/cases/mapset/index
SelM2610 Jan 21, 2026
d7150c9
Update Cases “insa/index”
SelM2610 Jan 22, 2026
b49fec4
Merge pull request #1108 from geops/cms/cases/insa/index
SelM2610 Jan 22, 2026
5284eb5
fix: change translations
oterral Jan 22, 2026
d8eb2b7
Merge branch 'olivier/caroussel' into staging
oterral Jan 22, 2026
9198fd0
fix: allow customer to null
oterral Jan 22, 2026
43e3dc7
Merge branch 'main' into staging
oterral Jan 22, 2026
deccdca
Create Person “flore-dc”
SelM2610 Jan 27, 2026
bf648de
Merge pull request #1109 from geops/cms/person/flore-dc
SelM2610 Jan 27, 2026
cdc30bc
Update Cases “puenktlichkeitskarte/index”
SelM2610 Jan 28, 2026
8619d70
Merge pull request #1111 from geops/cms/cases/puenktlichkeitskarte/index
SelM2610 Jan 28, 2026
135be68
Update Cases “amo-karte/index”
SelM2610 Jan 28, 2026
dd735e2
Merge pull request #1112 from geops/cms/cases/amo-karte/index
SelM2610 Jan 28, 2026
bd25920
Update Cases “s-bahn-muenchen/index”
SelM2610 Jan 28, 2026
2b3a2f9
Merge pull request #1113 from geops/cms/cases/s-bahn-muenchen/index
SelM2610 Jan 28, 2026
e9a6660
Update Cases “puenktlichkeitskarte/index”
SelM2610 Jan 28, 2026
01ad322
Update Cases “puenktlichkeitskarte/index”
SelM2610 Jan 28, 2026
1bd0583
Merge pull request #1114 from geops/cms/cases/puenktlichkeitskarte/index
SelM2610 Jan 28, 2026
cb005cb
Update Cases “mapset/index”
SelM2610 Jan 28, 2026
d959554
Merge pull request #1115 from geops/cms/cases/mapset/index
SelM2610 Jan 28, 2026
8c29f00
Delete “public/images/cases/die-schweiz-entdecken-digitale-öv-karte-f…
SelM2610 Jan 28, 2026
9c56d26
Update Cases “sts-webkarte/index”
SelM2610 Jan 28, 2026
d5a8b46
Update Cases “sts-webkarte/index”
SelM2610 Jan 28, 2026
3d96ea6
Merge pull request #1116 from geops/cms/cases/sts-webkarte/index
SelM2610 Jan 28, 2026
4514332
Update Cases “sts-webkarte/index”
SelM2610 Jan 28, 2026
486a796
Update Cases “sts-webkarte/index”
SelM2610 Jan 28, 2026
dc9c279
Merge pull request #1117 from geops/cms/cases/sts-webkarte/index
SelM2610 Jan 28, 2026
cadcaab
Update Cases “international-connections/index”
SelM2610 Jan 28, 2026
125ef75
Merge pull request #1118 from geops/cms/cases/international-connectio…
SelM2610 Jan 28, 2026
cf8258a
Update Cases “treeapp/index”
SelM2610 Jan 28, 2026
59af066
Update Cases “treeapp/index”
SelM2610 Jan 28, 2026
1c5c683
Merge pull request #1119 from geops/cms/cases/treeapp/index
SelM2610 Jan 28, 2026
ed7274a
Update Cases “alma/index”
SelM2610 Jan 30, 2026
26c03e6
Merge pull request #1120 from geops/cms/cases/alma/index
SelM2610 Jan 30, 2026
955cc49
Update Cases “puenktlichkeitskarte/index”
SelM2610 Jan 30, 2026
06f86e7
Merge pull request #1123 from geops/cms/cases/puenktlichkeitskarte/index
SelM2610 Jan 30, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .env
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
COMPLETE_URL=https://geops.com/api/callback
ORIGIN=geops.com
COMPLETE_URL=https://stag.geops.com/api/callback
ORIGIN=geops.com,stag.geops.com
NEXT_SHARP_PATH="./node_modules/sharp"
25 changes: 25 additions & 0 deletions app/de/cases/[slug]/page.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import getContentList from "../../../../lib/getContentList.js";
import { getCasesSlugProps } from "../../../../lib/getProps.js";
import { generateCasesSlugMetadata } from "../../../../lib/getMetadata.js";
import CasesArticle from "../../../../components/CasesArticle.js";

export async function generateMetadata({ params: { slug } }) {
const md = await generateCasesSlugMetadata("de", slug);
return md;
}

export async function generateStaticParams() {
const list = getContentList("de", {
collections: ["cases"],
fields: ["slug"],
});

return list.map(({ slug }) => ({
slug,
}));
}

export default async function Page({ params: { slug } }) {
const props = await getCasesSlugProps("de", slug);
return <CasesArticle {...props} />;
}
13 changes: 13 additions & 0 deletions app/de/cases/page.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import CasesIndex from "../../../components/CasesIndex.js";
import { getCasesProps } from "../../../lib/getProps.js";
import { generateCasesMetadata } from "../../../lib/getMetadata.js";

export async function generateMetadata() {
const md = await generateCasesMetadata("de", "/de/cases", "/en/cases");
return md;
}

export default async function Page() {
const props = await getCasesProps("de");
return <CasesIndex {...props} />;
}
25 changes: 25 additions & 0 deletions app/en/cases/[slug]/page.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import getContentList from "../../../../lib/getContentList.js";
import { getCasesSlugProps } from "../../../../lib/getProps.js";
import { generateCasesSlugMetadata } from "../../../../lib/getMetadata.js";
import CasesArticle from "../../../../components/CasesArticle.js";

export async function generateMetadata({ params: { slug } }) {
const md = await generateCasesSlugMetadata("en", slug);
return md;
}

export async function generateStaticParams() {
const list = getContentList("en", {
collections: ["cases"],
fields: ["slug"],
});

return list.map(({ slug }) => ({
slug,
}));
}

export default async function Page({ params: { slug } }) {
const props = await getCasesSlugProps("en", slug);
return <CasesArticle {...props} />;
}
13 changes: 13 additions & 0 deletions app/en/cases/page.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import CasesIndex from "../../../components/CasesIndex.js";
import { getCasesProps } from "../../../lib/getProps.js";
import { generateCasesMetadata } from "../../../lib/getMetadata.js";

export async function generateMetadata() {
const md = await generateCasesMetadata("de", "/de/cases", "/en/cases");
return md;
}

export default async function Page() {
const props = await getCasesProps("en");
return <CasesIndex {...props} />;
}
8 changes: 4 additions & 4 deletions components/Article.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,22 @@ import { Prism as SyntaxHighlighter } from "react-syntax-highlighter";
import { useI18n } from "../lib/i18n";
import namedCodesToUnicode from "../lib/namedCodesToUnicode";

function CodeBlock({ className, children }) {
export function CodeBlock({ className, children }) {
let lang = "text"; // default monospaced text
if (className && className.startsWith("lang-")) {
lang = className.replace("lang-", "");
}
return <SyntaxHighlighter language={lang}>{children}</SyntaxHighlighter>;
}

function PreBlock({ children, ...rest }) {
export function PreBlock({ children, ...rest }) {
if ("type" in children && children["type"] === "code") {
return CodeBlock(children["props"]);
}
return <pre {...rest}>{children}</pre>;
}

function ArticleImage({ alt, imageSizes, src, title }) {
export function ArticleImage({ alt, imageSizes, src, title }) {
const { height, width } = imageSizes[src] || {};
if (!height || !width) {
return `Fehler: Bildgröße für ${src} konnte nicht ermittelt werden.`;
Expand All @@ -31,7 +31,7 @@ function ArticleImage({ alt, imageSizes, src, title }) {
);
}

function ResponsiveImage({ alt, desktop, mobile, imageSizes, title }) {
export function ResponsiveImage({ alt, desktop, mobile, imageSizes, title }) {
return (
<>
{desktop && (
Expand Down
34 changes: 12 additions & 22 deletions components/CareerContent.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import ArrowCircleIcon from "./icons/ArrowCircleIcon.js";
import CaretIcon from "./icons/CaretIcon.js";
import Button from "./Button";
import Hero from "./Hero.js";
import Testimonial from "./Testimonial.js";

const { screens } = resolveConfig(tailwindConfig).theme;

Expand Down Expand Up @@ -136,29 +137,18 @@ function CareerTestimonials({ items }) {
className={`container mx-auto grid gap-8 grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 items-center mb-10 px-8 justify-center w-full`}
>
{items?.map((testimonial) => (
<div
className={`pt-20 flex flex-col md:last:odd:col-span-2 lg:last:odd:col-span-1 items-center `}
<Testimonial
key={testimonial.author}
>
<div
className={`bg-gray-lighter p-8 rounded-xl relative flex flex-col gap-4 max-w-[400px] ${items.length % 2 === 0 ? "xl:min-h-[450px] 2xl:min-h-[380px] xl:max-w-[320px]" : ""} md:min-h-[400px] min-h-[350px]`}
>
<Image
src={`/images/career/${testimonial.image}`}
alt={testimonial.author}
width={150}
height={150}
className="rounded-full absolute -top-20 left-1/2 translate-x-[-50%]"
/>
<p className="mt-20 text-lg italic text-center">
&#171;{testimonial.quote}&#187;
</p>
<p className="mt-auto text-sm text-center">
<span className="text-green">{testimonial.author}</span>,{" "}
{testimonial.position}
</p>
</div>
</div>
author={testimonial.author}
quote={testimonial.quote}
portrait={`/images/career/${testimonial.portrait}`}
position={testimonial.position}
className={
items.length % 2 === 0
? "xl:min-h-[450px] 2xl:min-h-[380px] xl:max-w-[320px]"
: ""
}
/>
))}
</div>
);
Expand Down
25 changes: 25 additions & 0 deletions components/CaseDetails.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { useI18n } from "../lib/i18n";

export function CaseDetails({ timeline, service }) {
const { t } = useI18n();
return (
<div className="text-gray-700 my-8 grid gap-8 md:grid-cols-2">
{service && (
<div>
<h3>
<strong>{t("cases.service")}</strong>
</h3>
<span>{service}</span>
</div>
)}
{timeline && (
<div>
<h3>
<strong>{t("cases.timeline")}</strong>
</h3>
<span>{timeline}</span>
</div>
)}
</div>
);
}
25 changes: 25 additions & 0 deletions components/CaseTestimonial.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import Image from "next/image";

function CaseTestimonial({ quote, author, portrait, position }) {
return (
<div className="bg-white relative flex flex-col md:flex-row gap-8 md:gap-16 items-center">
{portrait ? (
<Image
src={portrait}
alt={author}
width={150}
height={150}
className="rounded-full object-cover not-prose"
/>
) : null}
<div>
<p className="text-lg italic text-center">&#171;{quote}&#187;</p>
<p className="mt-auto text-sm text-center">
<span className="text-green">{author}</span>, {position}
</p>
</div>
</div>
);
}

export default CaseTestimonial;
34 changes: 34 additions & 0 deletions components/CasesArticle.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
"use client";

import { ch } from "./Contact.js";
import ContactPerson from "./ContactPerson.js";
import Layout from "./Layout.js";
import RelatedList from "./RelatedList.js";
import CasesArticleBody from "./CasesArticleBody.js";

export default function CasesArticle(props) {
const { related, case: caseItem } = props;

if (!caseItem) {
return null;
}

return (
<Layout
title={caseItem.title}
description={caseItem.summary}
path={`/cases`}
translationPath={`/cases`}
slugByLocale={caseItem.slugByLocale}
shareImg={caseItem?.cover}
>
<CasesArticleBody case={caseItem} />
<ContactPerson
person={{ ...ch, email: caseItem.contactEmail || ch.email }}
subtitle={caseItem.contactSubtitle}
title={caseItem.contactTitle}
/>
<RelatedList dark list={related} />
</Layout>
);
}
105 changes: 105 additions & 0 deletions components/CasesArticleBody.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
import PageHeader from "./PageHeader.js";
import Markdown from "markdown-to-jsx";
import { ArticleImage, PreBlock, ResponsiveImage } from "./Article.js";
import namedCodesToUnicode from "../lib/namedCodesToUnicode.js";
import { CaseDetails } from "./CaseDetails.js";
import Image from "next/image.js";
import CaseTestimonial from "./CaseTestimonial.js";

function Testimonials({ testimonials = [] }) {
return testimonials.length > 0 ? (
<div className="mt-8 flex flex-col gap-8">
{testimonials.map(
({ text: quote, name: author, position, portrait }, index) => (
<CaseTestimonial
key={index}
quote={quote}
author={author}
position={position}
portrait={portrait}
/>
),
)}
</div>
) : null;
}

function CasesArticleBody({ case: caseItem }) {
const {
cover,
content: { lead, title, sections },
testimonials,
testimonialsOnTop,
imageSizes,
} = caseItem;

return (
<>
<PageHeader src={cover} srcMobile={cover} titleDown />
<article className="container prose prose-xl mx-auto mb-16 max-w-screen-lg break-words px-8 pt-8 lg:pt-0">
<div>
<p>{caseItem.customer?.fullName}</p>
<h1 className="!leading-snug text-balance text-green">{title}</h1>
<Markdown
options={{
forceBlock: true,
overrides: {
img: {
component: ArticleImage,
props: { imageSizes },
},
ResponsiveImage: {
component: ResponsiveImage,
props: { imageSizes },
},
pre: PreBlock,
},
namedCodesToUnicode,
}}
>
{lead}
</Markdown>
</div>
{testimonialsOnTop ? (
<Testimonials testimonials={testimonials} />
) : null}
{sections?.length &&
sections.map(({ title, text, image, imagePosition, highlight }) => {
const imageClass = /top|left/.test(imagePosition)
? "lg:order-[-1]"
: "mt-0";
const containerClass = /right|left/.test(imagePosition)
? "lg:grid-cols-2"
: "";
return (
<div
key={title}
className={`grid grid-cols-1 gap-8 lg:gap-16 items-center ${containerClass}`}
>
<div>
<h2 className={highlight ? "text-green" : ""}>{title}</h2>
<Markdown options={{ forceBlock: true }}>{text}</Markdown>
</div>
{image && imageSizes[image]?.width && (
<Image
src={image}
alt={title || ""}
width={imageSizes[image]?.width}
height={imageSizes[image]?.height}
className={imageClass}
/>
)}
</div>
);
})}

{testimonialsOnTop ? null : (
<Testimonials testimonials={testimonials} />
)}
<CaseDetails timeline={caseItem.timeline} service={caseItem.service} />
</article>
</>
);
}

export default CasesArticleBody;
Loading
Loading