Add README, customization snapshot, and snapshot/restore tooling

Provisioning now restores all GUI customizations on reset+reprovision:

- create_pod_espocrm.sh: deploy the version-controlled espocrm-custom/ tree
  (CTag entity, layouts, i18n, clientDefs, custom views, custom CSS) into the
  pod, then chown www-data and rebuild. Replaces the earlier inline CSS-only
  step. Adds a live-phase cache rebuild so customizations and the client
  cacheTimestamp are refreshed on every run.
- espocrm-custom/: snapshot of custom/ and client/custom/ (source of truth).
- snapshot_espocrm_custom.sh: refresh the snapshot from a running pod.
- readme.md: usage, first-time host setup, image-update and reset workflows.
- Include the task/instruction notes and plan.md for reference.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
mkt
2026-06-06 16:51:02 +02:00
parent 79ea236da0
commit cebe829dcd
79 changed files with 2064 additions and 45 deletions

View File

@@ -0,0 +1,10 @@
{
"fields": {
"cAgentur": "Agentur",
"cTags": "Tags"
},
"links": {
"cAgentur": "Agentur",
"cTags": "Tags"
}
}

View File

@@ -0,0 +1,15 @@
{
"labels": {
"Create CTag": "Tag erstellen"
},
"fields": {
"verkaufschancen": "Verkaufschancen",
"kontakte": "Kontakte",
"firmen": "Firmen"
},
"links": {
"verkaufschancen": "Verkaufschancen",
"kontakte": "Kontakte",
"firmen": "Firmen"
}
}

View File

@@ -0,0 +1,8 @@
{
"fields": {
"cTags": "Tags"
},
"links": {
"cTags": "Tags"
}
}

View File

@@ -0,0 +1,60 @@
{
"options": {
"stage": {
"Interessant": "Interessant",
"Abgelehnt": "Abgelehnt",
"Angefragt": "Angefragt",
"Agentur prüft": "Agentur prüft",
"Kunde prüft": "Kunde prüft",
"Identifiziert": "Identifiziert",
"Brief versendet": "Brief versendet",
"Anruf-Wiedervorlage": "Anruf-Wiedervorlage",
"Angerufen": "Angerufen",
"Ersttermin vereinbart": "Ersttermin vereinbart",
"Ersttermin durchgeführt": "Ersttermin durchgeführt",
"Angebot": "Angebot",
"Verhandlung": "Verhandlung",
"Unterschriftsreif": "Unterschriftsreif",
"Gewonnen": "Gewonnen",
"In Durchführung": "In Durchführung",
"Abgeschl. / Bestandsk.": "Abgeschl. / Bestandsk.",
"Verloren": "Verloren",
"Ghosted": "Ghosted"
},
"cLeadQuelle": {
"Inbound Agentur": "Inbound Agentur",
"Inbound Plattform-Lead": "Inbound Plattform-Lead",
"Aktive Plattform-Suche": "Aktive Plattform-Suche",
"Aktive Akquise": "Aktive Akquise",
"Empfehlung / Netzwerk": "Empfehlung / Netzwerk",
"Sonstiges": "Sonstiges"
},
"cVerlustgrund": {
"Agentur Absage": "Agentur Absage",
"Kunde Absage": "Kunde Absage",
"Keine Einigung": "Keine Einigung",
"Eigene Absage": "Eigene Absage",
"Sonstiges": "Sonstiges",
"Agentur Ghosted": "Agentur Ghosted",
"Kunde Ghosted": "Kunde Ghosted"
},
"cVerguetungsmodell": {
"Agentur Honorar": "Agentur Honorar",
"Direkt Festpreis": "Direkt Festpreis",
"Direkt Honorar": "Direkt Honorar",
"Direkt Nutzenbasiert": "Direkt Nutzenbasiert"
}
},
"fields": {
"cLeadQuelle": "Lead-Quelle",
"cVerlustgrund": "Verlustgrund",
"cProjektlink": "Projektlink",
"cVerguetungsmodell": "Vergütungsmodell",
"cAccount1": "Über Agentur",
"cTags": "Tags"
},
"links": {
"cAccount1": "Über Agentur",
"cTags": "Tags"
}
}