feat: Update features and pricing details in the application

- Refactored feature descriptions and added new features for document generation and appointment management.
- Updated the pricing structure, including adjustments to pack prices and additional options for training.
- Introduced a new blog section with initial blog posts.
- Enhanced the technical documentation page with an embedded iframe for better accessibility.
- Improved CSS styles for better responsiveness and visual consistency across the application.
- Updated Hugo configuration to reflect new menu items and page structures.
This commit is contained in:
Boris Waaub
2026-02-12 13:28:31 +01:00
parent 96622d99b0
commit fe5736f64f
24 changed files with 212 additions and 166 deletions

View File

@@ -18,7 +18,7 @@ $chill-light-blue: #a0dcff;
.badge-suivi-accompagnements { --badge-color: #EDC74B; }
.badge-suivi-decisions { --badge-color: #a0dcff; }
.badge-suivi-usagers{ --badge-color: #333333; }
.badge-rendez-vous{ --badge-color: #0d242e; }
.badge-rendez-vous{ --badge-color: #E27A3E; }
/// Other custom colors
$bg-dark-blue: #0d242e;
@@ -414,7 +414,7 @@ figure.image {
// RESPONSIVENESS
@media screen and (max-width: 1279px) {
@media screen and (max-width: 1536px) {
section {
&.li-block {
&.section-5 {

View File

@@ -48,7 +48,7 @@ testimonials:
"image": "/images/features/HP-suiviusager.png",
"buttonText": "En savoir plus",
"buttonLink": "/features/suivi-usagers/",
"features": "Fiche individuelle détaillée,Gestion des ménages,Suivi budgétaire,Personnes ressources,Génération de documents,Enregistrement de tâches",
"features": "Fiche individuelle détaillée|Gestion des ménages|Suivi budgétaire|Personnes ressources|Génération de documents|Enregistrement de tâches",
"imagePosition": "right"
},
{
@@ -60,31 +60,7 @@ testimonials:
"image": "/images/features/HP-accompagnement.png",
"buttonText": "En savoir plus",
"buttonLink": "/features/suivi-accompagnements/",
"features": "Renseigner les parcours,Caractériser les parcours,Enregistrer les échanges,Actions mises en œuvre",
"imagePosition": "left"
},
{
"title": "Suivi des décisions",
"titleBtn": "Décisions",
"description": "CHILL facilite le suivi et la validation de décisions au sein dune équipe.",
"badge": "Décisions",
"badgeColor": "suivi-decisions",
"image": "/images/features/HP-décisions.png",
"buttonText": "En savoir plus",
"buttonLink": "/features/suivi-accompagnements/",
"features": "Permet de configurer des parcours de validation adaptés,Approbation hiérarchique possible, Obtention dun visa dun service compétent possible,Autres types de validations personnalisables selon les besoins,Basé sur des documents existants,Basé sur des actions daccompagnement",
"imagePosition": "right"
},
{
"title": "Rapports statistiques",
"titleBtn": "Statistiques",
"description": "CHILL vous permet dexporter des statistiques précises sur lensemble de vos entités.",
"badge": "Statistiques",
"badgeColor": "rapports-statistiques",
"image": "/images/feature-2.svg",
"buttonText": "En savoir plus",
"buttonLink": "/features/suivi-accompagnements/",
"features": "Données de lusager,Données des ménages,Actions daccompagnement,Problématiques sociales,Rendez-vous,Et bien plus encore...",
"features": "Création de parcours|Caractérisation des parcours avec des problématiques sociales|Mise en place de rendez-vous avec envoi de sms de rappel|Enregistrement d'échanges|Traduction des conseils et orientations données en actions|Partage de l'information entre collègues via des notifications",
"imagePosition": "left"
},
{
@@ -96,32 +72,57 @@ testimonials:
"image": "/images/feature-2.svg",
"buttonText": "En savoir plus",
"buttonLink": "/features/suivi-accompagnements/",
"features": "Informations sur l'usager,Informations sur le ménage,Détails financiers ou sociaux,Et bien plus encore...",
"features": "Informations sur l'usager|Informations sur le ménage|Détails financiers ou sociaux|Et bien plus encore...",
"imagePosition": "right"
},
{
"title": "Droits d'accès",
"titleBtn": "Droits d'accès",
"description": "Générez des rapports statistiques, organisez vos documents et assurez la conformité RGPD pour la sécurité et la confidentialité des données.",
"badge": "Droits d'accès",
"badgeColor": "rapport-rgpd",
"image": "/images/feature-3.svg",
"buttonText": "En savoir plus",
"buttonLink": "/features/rapports-rgpd/",
"features": "Rapports statistiques,Génération de documents,Organisation documentaire,Conformité RGPD",
"imagePosition": "left"
},
{
{
"title": "Rendez-vous",
"titleBtn": "Rendez-vous",
"description": "Planifiez, organisez et suivez efficacement tous vos rendez-vous, que ce soit pour vous-même ou pour vos collègues. Profitez d'outils de synchronisation, de rappels et d'intégration à venir avec Google Agenda.",
"description": "Planifiez, organisez et suivez efficacement vos rendez-vous, que ce soit pour vous-même ou pour vos collègues.",
"badge": "Rendez-vous",
"badgeColor": "rendez-vous",
"image": "/images/feature-3.svg",
"buttonText": "En savoir plus",
"buttonLink": "/features/rendez-vous/",
"features": "Ajoutez un rendez-vous directement dans votre propre agenda,Planifiez un rendez-vous sur une plage créée au préalable par un autre membre de léquipe,Synchronisation avec agendas électroniques,Possibilité de rappels,Un rendez-vous peut être converti en échange si besoin."
}
"features": "Ajout de plages de disponibilité |Planification de rendez-vous entre collègues|Synchronisation avec les agendas éléctroniques (connecteur avec Outlook, Zimbra, etc)|Possibilité d'envoi de rappels par sms|Transformation du rendez-vous en échange"
},
{
"title": "Suivi des décisions",
"titleBtn": "Décisions",
"description": "CHILL facilite le suivi et la validation de décisions au sein dune équipe.",
"badge": "Décisions",
"badgeColor": "suivi-decisions",
"image": "/images/features/HP-décisions.png",
"buttonText": "En savoir plus",
"buttonLink": "/features/suivi-accompagnements/",
"features": "Structuration des décisions et des actions|Personnalisation des étapes du workflow|Définition des rôles et responsabilités de chacun|Notifications automatiques liées aux décisions|Suivi global de lavancement",
"imagePosition": "right"
},
{
"title": "Rapports statistiques",
"titleBtn": "Statistiques",
"description": "CHILL facilite la génération et lextraction de statistiques croisées sur le travail daccompagnement social et les bénéficiaires.",
"badge": "Statistiques",
"badgeColor": "rapports-statistiques",
"image": "/images/feature-2.svg",
"buttonText": "En savoir plus",
"buttonLink": "/features/suivi-accompagnements/",
"features": "Données de lusager|Données des ménages|Actions daccompagnement|Problématiques sociales|Rendez-vous|Et bien plus encore...",
"imagePosition": "left"
},
{
"title": "Droits d'accès",
"titleBtn": "Droits d'accès",
"description": "CHILL respecte scrupuleusement les principes du RGPD de privacy by design et security by design, en offrant la possibilité aux administrateurs de paramétrer différents rôles, cercles dutilisateurs et règles daccès aux contenus.",
"badge": "Droits d'accès",
"badgeColor": "rapport-rgpd",
"image": "/images/feature-3.svg",
"buttonText": "En savoir plus",
"buttonLink": "/features/rapports-rgpd/",
"features": "",
"imagePosition": "left"
}
]
}
{{< /features-carousel >}}

View File

@@ -1,7 +1,7 @@
---
title: "Génération de documents"
description: "Grâce à un système de modèles personnalisables, vous pouvez générer automatiquement des documents avec un large éventail dinformations déjà pré-remplies à partir des données présentes dans lapplication."
weight: 5
weight: 3
layout: "single"
badge: "Documents"
badgeColor: "generation-document"

View File

@@ -1,7 +1,7 @@
---
title: "Droits daccès"
description: "Générez des rapports statistiques, organisez vos documents et assurez la conformité RGPD pour la sécurité et la confidentialité des données."
weight: 6
weight: 7
layout: "single"
badge: "Droits daccès"
badgeColor: "rapport-rgpd"

View File

@@ -1,7 +1,7 @@
---
title: "Rapports statistiques"
description: "CHILL vous permet dexporter des statistiques précises sur lensemble de vos entités."
weight: 4
weight: 6
layout: "single"
badge: "Statistiques"
badgeColor: "rapports-statistiques"
@@ -13,7 +13,7 @@ demo:
## Présentation
CHILL vous permet dexporter des statistiques précises sur lensemble de vos entités, facilitant lanalyse et le pilotage de votre activité.
CHILL facilite la génération et lextraction de statistiques croisées sur le travail daccompagnement social et les bénéficiaires.
## Fonctionnalités principales

View File

@@ -1,7 +1,7 @@
---
title: "Rendez-vous"
description: "Planifiez, organisez et suivez efficacement tous vos rendez-vous, que ce soit pour vous-même ou pour vos collègues, avec des outils de synchronisation et de rappel avancés."
weight: 7
weight: 4
layout: "single"
badge: "Rendez-vous"
badgeColor: "rendez-vous"
@@ -15,13 +15,13 @@ demo:
## Présentation
La fonctionnalité Rendez-vous de Chill vous permet de gérer simplement la prise de rendez-vous, la coordination entre collègues et la synchronisation avec des outils externes. Que ce soit pour fixer un rendez-vous dans votre propre agenda ou dans une plage de disponibilité dun collègue, tout est pensé pour faciliter votre organisation quotidienne. Des rappels automatiques et la possibilité de synchroniser avec Google Agenda (connecteur à venir) rendent la gestion des rendez-vous encore plus fluide.
Planifiez, organisez et suivez efficacement vos rendez-vous, que ce soit pour vous-même ou pour vos collègues.
## Planification dune rencontre
- **Dans mon agenda** : Ajoutez un rendez-vous directement dans votre propre agenda.
- **Dans une plage de disponibilité dun collègue** : Planifiez un rendez-vous sur une plage créée au préalable par un autre membre de léquipe.
- **Synchronisation avec agendas électroniques** : (connecteur avec Google Agenda à développer)
- **Possibilité de rappels** : Notifications par SMS, etc.
- **Transformation en échange** : Un rendez-vous peut être converti en échange si besoin.
- **Ajout de plages de disponibilité** : Créez des créneaux de disponibilité pour que vos collègues puissent vous proposer des rendez-vous.
- **Planification de rendez-vous entre collègues** : Organisez des rencontres directement dans les agendas de vos collègues ou dans votre propre agenda.
- **Synchronisation avec les agendas électroniques** : Connecteurs avec Outlook, Zimbra, Google Agenda et autres solutions d'agenda populaires.
- **Possibilité d'envoi de rappels par SMS** : Recevez des notifications par SMS avant vos rendez-vous.
- **Transformation du rendez-vous en échange** : Convertissez un rendez-vous en échange si besoin.

View File

@@ -16,7 +16,9 @@ Créez et suivez un ou plusieurs parcours daccompagnement pour chaque usager,
## Fonctionnalités principales
- **Renseigner les parcours** : Ajoutez et suivez les différents parcours daccompagnement.
- **Caractériser les parcours** : Définissez les caractéristiques propres à chaque accompagnement.
- **Enregistrer les échanges** : Gardez une trace des échanges et interactions avec lusager.
- **Actions mises en œuvre** : Planifiez et suivez les actions réalisées dans le cadre de laccompagnement.
- **Création de parcours** : Ajoutez et suivez les différents parcours d'accompagnement.
- **Caractérisation des parcours avec des problématiques sociales** : Définissez les caractéristiques et enjeux sociaux propres à chaque accompagnement.
- **Mise en place de rendez-vous avec envoi de SMS de rappel** : Planifiez les rendez-vous et automatisez les rappels par SMS.
- **Enregistrement d'échanges** : Gardez une trace des échanges et interactions avec l'usager.
- **Traduction des conseils et orientations données en actions** : Convertissez les orientations en actions concrètes et suivables.
- **Partage de l'information entre collègues via des notifications** : Facilitez la collaboration et la communication au sein de l'équipe.

View File

@@ -1,7 +1,7 @@
---
title: "Suivi des décisions"
description: "CHILL facilite le suivi et la validation de décisions au sein dune équipe."
weight: 3
weight: 5
layout: "single"
badge: "Décisions"
badgeColor: "suivi-decisions"
@@ -15,10 +15,8 @@ demo:
CHILL facilite le suivi et la validation de décisions au sein dune équipe, en sappuyant sur des processus adaptés à vos besoins organisationnels.
## Fonctionnalités principales
- **Parcours de validation configurables** : Adaptez les étapes de validation selon vos besoins.
- **Approbation hiérarchique** : Permettez une validation par la hiérarchie si nécessaire.
- **Visa de services compétents** : Obtenez lavis ou le visa dun service spécifique.
- **Validations personnalisables** : Créez dautres types de validations selon vos processus internes.
- **Basé sur des documents existants** : Utilisez les documents déjà présents dans lapplication.
- **Basé sur des actions daccompagnement** : Intégrez la validation dans le suivi des accompagnements.
- **Structuration des décisions et des actions** : Organisez et classifiez vos décisions de manière claire et cohérente.
- **Personnalisation des étapes du workflow** : Adaptez les étapes de validation selon vos processus spécifiques.
- **Définition des rôles et responsabilités de chacun** : Attribuez des responsabilités claires à chaque participant.
- **Notifications automatiques liées aux décisions** : Recevez des alertes en temps réel sur l'évolution des décisions.
- **Suivi global de l'avancement** : Visualisez l'état d'avancement de toutes vos décisions en un coup d'œil.

View File

@@ -1,13 +1,13 @@
---
title: "Une offre adaptée à vos besoins"
description: ""
description: "Selon votre structure, le type d'accompagnement et le nombre d'utilisateurs, nous avons une solution sur mesure.
<br>
Cette offre est proposée par **Champs Libres**, éditeur principal du logiciel **CHILL**.
<br>
Dautres prestataires pourront éventuellement sy ajouter à lavenir."
layout: "simple"
---
<div align="center">
Selon votre structure, le type d'accompagnement et le nombre d'utilisateurs, nous avons une solution sur mesure.
Cette offre est proposée par **Champs Libres**, éditeur principal du logiciel **CHILL**. Les prix s'entendent hors TVA. D'autres prestataires pourront éventuellement s'y ajouter à l'avenir
</div>
{{< pricing-table-2 >}}
@@ -17,7 +17,7 @@ Cette offre est proposée par **Champs Libres**, éditeur principal du logiciel
"name": "Gratuit",
"price": "0 €",
"price_unit": "perUser",
"description": "En auto-hébergement et en autonomie complète. Compétences en administration système requises.",
"description": "En auto-hébergement et en autonomie complète.*",
"selfhosted": true,
"features": [
"Aucun frais de licence d'utilisation",
@@ -27,6 +27,7 @@ Cette offre est proposée par **Champs Libres**, éditeur principal du logiciel
"Aucun support, ou en régie à 110€ de l'heure"
],
"additional_description": "* Compétences en administration système requises.",
"button": {
"text": "Voir la documentation",
"url": "/install/on-premise/"
@@ -34,7 +35,7 @@ Cette offre est proposée par **Champs Libres**, éditeur principal du logiciel
},
{
"name": "Pack Initial",
"price": "1100 €",
"price": "1200 €",
"price_unit": "perVATYear",
"additional_price": "+ 1400€ HT de frais de mise en service",
"description": "Pour les structures qui souhaitent un accompagnement minimal",
@@ -42,10 +43,10 @@ Cette offre est proposée par **Champs Libres**, éditeur principal du logiciel
"Installation du logiciel",
"1 journée de paramétrage",
"2h de support la 1ère année",
"3 utilisateurs inclus",
"3 utilisateurs inclus*",
"20Go de stockage de documents"
],
"additional_description": "A partir du 4ème utilisateur: 35€ supplémentaire/an.",
"additional_description": "* A partir du 4ème utilisateur: 40€ supplémentaire/an.",
"button": {
"text": "Demander un devis",
"url": "/contact/"
@@ -53,15 +54,16 @@ Cette offre est proposée par **Champs Libres**, éditeur principal du logiciel
},
{
"name": "Pack Complet",
"price": "1100€",
"price": "1200€",
"price_unit": "perVATYear",
"additional_price": "+ 2700€ HT de frais de mise en service",
"description": "Pour les structures qui souhaites déléguer totalement la configuration.",
"featured": true,
"features": [
"Tout les avantages du pack initial",
"1 journée supplémentaire"
"Tout les avantages du pack initial *",
"1 journée de paramétrage supplémentaire"
],
"additional_description": "* A partir du 4ème utilisateur: 40€ supplémentaire/an.",
"button": {
"text": "Demander un devis",
"url": "/contact/"
@@ -69,13 +71,27 @@ Cette offre est proposée par **Champs Libres**, éditeur principal du logiciel
},
{
"name": "Pack sur mesure",
"price": "",
"price": "Sur demande",
"description": "Pour les structures qui nécessitent des développments spécifiques",
"features": [
"Développement sur mesure",
"Equipe projet dédiée",
"Outil de ticketing",
"Mise à jour régulières"
"Mises à jour régulières"
],
"button": {
"text": "Contactez-nous",
"url": "/contact/"
}
},
{
"name": "Option Formation",
"price": "850€",
"price_unit": "perVATDay",
"additional_price": "ou 550€ HT/demis-jour",
"description": "Deux options pour prendre en main l'outil",
"features": [
"Une journée ou demis-journée de formation en présentiel ou en visio pour vous former sur l'outil"
],
"button": {
"text": "Contactez-nous",
@@ -86,4 +102,3 @@ Cette offre est proposée par **Champs Libres**, éditeur principal du logiciel
]
}
{{< /pricing-table-2 >}}

View File

@@ -0,0 +1,4 @@
---
title: "Blog"
layout: "list"
---

View File

@@ -0,0 +1,9 @@
---
title: "Lorem ipsum dolor sit amet"
date: 2026-01-28
author: "Champs-Libres"
description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
categories: ["Lorem"]
tags: ["ipsum", "dolor"]
featured_image: ""
---

View File

@@ -0,0 +1,9 @@
---
title: "Lorem ipsum dolor sit amet"
date: 2026-01-28
author: "Champs-Libres"
description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
categories: ["Lorem"]
tags: ["ipsum", "dolor"]
featured_image: ""
---

View File

@@ -25,3 +25,4 @@ La documentation technique de Chill se trouve à l'adresse suivante: http://docs
<h5 class="content-subtitle bord-1">Contribuer, devenir prestataire</h5>
Si vous souhaitez contribuer au code de Chill et peut-être devenir prestataire du logiciel, jetez un oeil à la page [Contributing](https://gitlab.com/Chill-Projet/chill-bundles/-/blob/master/CONTRIBUTING.md).
<iframe src="https://docs.chill.social/en/latest/" style="width: 100%; min-height: 720px; border: 1px solid #ccc;"></iframe>

View File

@@ -1,5 +1,5 @@
---
title: "About Our Company"
title: "Secteur d'activité"
layout: "company"
description: "Learn about our mission, leadership team, and the investors backing our vision"
---

View File

@@ -124,14 +124,9 @@ pagination = { pagerSize = 6, path = "page" }
url = "/features"
weight = 1
[[menu.main]]
name = "Installation"
name = "Secteurs d'activité"
weight = 2
[menu.main.params]
has_submenu = true
submenu = [
{ name = "Par Champs Libres", url = "/install/hosted" },
{ name = "En auto-hébergement", url = "/install/on-premise" }
]
url = "/sector"
[[menu.main]]
name = "Tarification"
url = "/pricing"
@@ -142,9 +137,10 @@ pagination = { pagerSize = 6, path = "page" }
[menu.main.params]
has_submenu = true
submenu = [
{ name = "Documentation technique", url = "/resources/technical-documentation" },
{ name = "Blog", url = "/resources/blog" },
{ name = "Manuels", url = "/resources/manuals" },
{ name = "Tutoriels", url = "/resources/tutorials" },
{ name = "Documentation technique", url = "/resources/technical-documentation" },
{ name = "FAQ", url = "/resources/faq" }
]
[[menu.main]]

View File

@@ -23,7 +23,7 @@
}
.badge-rendez-vous {
--badge-color: #0d242e;
--badge-color: #E27A3E;
}
@font-face {

View File

@@ -2519,6 +2519,10 @@ body {
max-width: none;
}
.max-w-screen-2xl {
max-width: 1536px;
}
.max-w-screen-md {
max-width: 768px;
}
@@ -2969,6 +2973,11 @@ body {
padding: 2rem;
}
.px-2 {
padding-left: 0.5rem;
padding-right: 0.5rem;
}
.px-3 {
padding-left: 0.75rem;
padding-right: 0.75rem;
@@ -3137,11 +3146,6 @@ body {
line-height: 2.5rem;
}
.text-5xl {
font-size: 3rem;
line-height: 1;
}
.text-base {
font-size: 1rem;
line-height: 1.5rem;
@@ -4554,6 +4558,10 @@ body {
margin-top: 5rem;
}
.sm\:grid-cols-2 {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.sm\:flex-row {
flex-direction: row;
}
@@ -4726,10 +4734,6 @@ body {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.lg\:grid-cols-4 {
grid-template-columns: repeat(4, minmax(0, 1fr));
}
.lg\:flex-row {
flex-direction: row;
}
@@ -4771,4 +4775,8 @@ body {
.xl\:grid-cols-4 {
grid-template-columns: repeat(4, minmax(0, 1fr));
}
.xl\:grid-cols-5 {
grid-template-columns: repeat(5, minmax(0, 1fr));
}
}

View File

@@ -1,8 +1,8 @@
{{ define "main" }}
<div class="container mx-auto px-4 py-8 mb-12 flex-1">
<div class="mx-auto px-4 py-8 mb-12 flex-1">
<h1 class="text-4xl font-bold text-center mb-5">{{ .Title }}</h1>
{{ with .Params.description }}
<p class="text-center font-light text-gray-500 sm:text-xl mb-5">{{ . }}</p>
<p class="text-center text-gray-500 sm:text-xl mb-5">{{ . | markdownify }}</p>
{{ end }}
<div class="!max-w-none">

View File

@@ -9,7 +9,7 @@
{{ $buttonLink := .buttonLink | default "#" }}
{{ $imagePosition := .imagePosition | default "right" }}
{{ $features := split (.features) "," }}
{{ $features := split (.features) "|" }}
<div class="grid lg:grid-cols-3 gap-12 items-center badge-{{ $badgeColor }}">
{{ if eq $imagePosition "left" }}
@@ -38,12 +38,14 @@
<p class="text-lg text-gray-600">{{ $description }}</p>
<ul class="space-y-4">
{{ range $features }}
<li class="flex items-start space-x-3">
<svg class="badge-icon w-5 h-5 flex-shrink-0 mt-1" fill="currentColor" viewBox="0 0 20 20" style="min-width:1.25rem; min-height:1.25rem;">
<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"/>
</svg>
<span>{{ . | default "" }}</span>
</li>
{{ if ne (. | default "") "" }}
<li class="flex items-start space-x-3">
<svg class="badge-icon w-5 h-5 flex-shrink-0 mt-1" fill="currentColor" viewBox="0 0 20 20" style="min-width:1.25rem; min-height:1.25rem;">
<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"/>
</svg>
<span>{{ . | default "" }}</span>
</li>
{{ end }}
{{ end }}
</ul>
<a href="{{ $buttonLink }}" class="btn-primary inline-block">{{ $buttonText }}</a>

View File

@@ -2,11 +2,12 @@
<form id="contactForm" class="max-w-lg mx-auto p-6 bg-white rounded shadow text-center" method="POST" action="{{ $form.action | default "http://localhost:3001/contact" }}">
<form id="contactForm" class="max-w-lg mx-auto p-6 bg-white rounded shadow" method="POST" action="{{ $form.action | default "http://localhost:3001/contact" }}">
<h3 class="text-2xl font-bold mb-4">{{ $form.title }}</h3>
{{ range $form.fields }}
<div class="mb-4">
{{ if eq .type "textarea" }}
<label for="{{ .name }}">{{ .label }}</label>
<textarea id="{{ .name }}" name="{{ .name }}" rows="5" {{ if .required }}required{{ end }} class="w-full px-3 py-2 border rounded focus:outline-none focus:ring focus:border-blue-300"></textarea>
{{ else if eq .type "select" }}
<select id="{{ .name }}" name="{{ .name }}" {{ if .required }}required{{ end }} class="w-full px-3 py-2 border rounded focus:outline-none focus:ring focus:border-blue-300">
@@ -15,7 +16,7 @@
{{ end }}
</select>
{{ else }}
<input type="{{ .type }}" id="{{ .name }}" name="{{ .name }}" {{ if .required }}required{{ end }} class="w-full px-3 py-2 border rounded focus:outline-none focus:ring focus:border-blue-300" />
<input type="{{ .type }}" placeholder="{{.label}}" id="{{ .name }}" name="{{ .name }}" {{ if .required }}required{{ end }} class="w-full px-3 py-2 border rounded focus:outline-none focus:ring focus:border-blue-300" />
{{ end }}
</div>
{{ end }}

View File

@@ -27,20 +27,20 @@
color: var(--badge-color);
}
</style>
<div class="badge inline-block px-4 py-2 rounded-full font-medium">{{ $badge }}</div>
<h3 class="text-2xl md:text-3xl font-bold">{{ $title }}</h3>
<p class="text-lg text-gray-600">{{ $description }}</p>
<div class="badge inline-block px-4 py-2 rounded-full font-medium">{{ $badge | markdownify }}</div>
<h3 class="text-2xl md:text-3xl font-bold">{{ $title | markdownify }}</h3>
<p class="text-lg text-gray-600">{{ $description | markdownify }}</p>
<ul class="space-y-4">
{{ range $features }}
<li class="flex items-start space-x-3">
<svg class="badge-icon w-5 h-5 flex-shrink-0 mt-1" fill="currentColor" viewBox="0 0 20 20" style="min-width:1.25rem; min-height:1.25rem;">
<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"/>
</svg>
<span>{{ . | default "" }}</span>
<span>{{ . | default "" | markdownify }}</span>
</li>
{{ end }}
</ul>
<a href="{{ $buttonLink }}" class="btn-primary inline-block">{{ $buttonText }}</a>
<a href="{{ $buttonLink }}" class="btn-primary inline-block">{{ $buttonText | markdownify }}</a>
</div>
{{ if ne $imagePosition "left" }}

View File

@@ -29,7 +29,7 @@
<h1 class="text-3xl font-bold mb-4 text-center">{{ $title | markdownify }}</h1>
{{ end }}
<div class="features-carousel__nav"></div>
<div class="features-carousel__slides">
<div class="features-carousel__slides">
{{ range $i, $f := $data.features }}
<div class="feature" data-title-btn="{{ $f.titleBtn }}">
{{ partial "shortcodes/feature.html" (dict

View File

@@ -11,7 +11,7 @@
{{ $parts := split . "|" }}
{{ if ge (len $parts) 2 }}
<div class="flex gap-6">
<div class="w-10 h-10 rounded-xl flex items-center justify-center flex-shrink-0" style="background-color: {{ $color }}15;">
<div class="w-10 h-10 rounded-xl flex items-center justify-center flex-shrink-0" class="rounded-xl">
{{ partial "icons" (dict "name" "check" "color" $color "size" "6") }}
</div>
<div>

View File

@@ -1,6 +1,6 @@
{{ $data := .Inner | unmarshal }}
<section class="bg-white">
<div class="py-8 px-4 mx-auto max-w-screen-xl lg:py-16 lg:px-6">
<div class="py-8 mx-auto max-w-screen-2xl lg:py-16 ">
{{ with $data.title }}
<div class="mx-auto max-w-screen-md text-center mb-8 lg:mb-12">
<h2 class="mb-4 text-4xl tracking-tight font-extrabold text-gray-900">{{ . }}</h2>
@@ -10,55 +10,55 @@
</div>
{{ end }}
<div class="grid grid-cols-1 lg:grid-cols-4 gap-8">
<div class="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 xl:grid-cols-5 gap-8">
{{ range $index, $plan := $data.plans }}
<div class="relative flex flex-col p-6 {{ if $plan.featured }}bg-primary-400 text-white{{ else }}bg-white{{ end }} rounded-2xl shadow-xl transform hover:-translate-y-1 transition duration-300">
{{ if $plan.featured }}
<div class="absolute -top-4 left-1/2 transform -translate-x-1/2">
<span class="bg-yellow-400 text-gray-900 text-xs font-semibold px-4 py-1 rounded-full">{{ i18n "mostPopular" }}</span>
</div>
{{ end }}
{{ if $plan.selfhosted }}
<div class="absolute -top-4 left-1/2 transform -translate-x-1/2">
<span class="bg-green-400 text-gray-900 text-xs font-semibold px-4 py-1 rounded-full">{{ i18n "selfHosted" }}</span>
</div>
{{ end }}
<div class="mb-4">
<h3 class="text-2xl font-bold {{ if $plan.featured }}text-white{{ else }}text-gray-900{{ end }}">{{ $plan.name }}</h3>
<p class="mt-2 {{ if not $plan.featured }}text-gray-500{{ end }}">{{ $plan.description }}</p>
{{ if $plan.featured }}
<div class="absolute -top-4 left-1/2 transform -translate-x-1/2">
<span class="bg-yellow-400 text-gray-900 text-xs font-semibold px-2 py-1 rounded-full">{{ i18n "mostPopular" }}</span>
</div>
{{ end }}
{{ if $plan.selfhosted }}
<div class="absolute -top-4 left-1/2 transform -translate-x-1/2">
<span class="bg-green-400 text-gray-900 text-xs font-semibold px-4 py-1 rounded-full">{{ i18n "selfHosted" }}</span>
</div>
{{ end }}
<div class="mb-4" style="min-height:112px;">
<h3 class="text-2xl font-bold {{ if $plan.featured }}text-white{{ else }}text-gray-900{{ end }}">{{ $plan.name }}</h3>
<p class="mt-2 {{ if not $plan.featured }}text-gray-500{{ end }}">{{ $plan.description }}</p>
</div>
{{ if $plan.price }}
<div class="mb-6">
<div class="flex items-baseline">
<span class="text-2xl font-extrabold tracking-tight {{ if not $plan.featured }}text-gray-900{{ end }}">{{ $plan.price }}</span>
<span class="ml-1 {{ if not $plan.featured }}text-gray-500{{ end }}">{{ i18n $plan.price_unit }}</span>
</div>
{{ if $plan.price }}
<div class="mb-6">
<div class="flex items-baseline">
<span class="text-5xl font-extrabold tracking-tight {{ if not $plan.featured }}text-gray-900{{ end }}">{{ $plan.price }}</span>
<span class="ml-1 {{ if not $plan.featured }}text-gray-500{{ end }}">{{ i18n $plan.price_unit }}</span>
</div>
<div class="flex items-baseline">
<span class="font-extrabold tracking-tight {{ if not $plan.featured }}text-gray-900{{ end }}">{{ $plan.additional_price }}</span>
</div>
</div>
<div class="flex items-baseline">
<span class="font-extrabold tracking-tight {{ if not $plan.featured }}text-gray-900{{ end }}">{{ $plan.additional_price }}</span>
</div>
</div>
{{ end }}
<ul class="mb-8 space-y-4 flex-grow">
{{ range $plan.features }}
<li class="flex items-center">
<svg class="w-5 h-5 {{ if $plan.featured }}text-white{{ else }}text-green-500{{ end }} mr-2" fill="currentColor" viewBox="0 0 20 20">
<path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd"></path>
</svg>
<span class="{{ if not $plan.featured }}text-gray-600{{ end }}">{{ . }}</span>
</li>
{{ end }}
<ul class="mb-8 space-y-4 flex-grow">
{{ range $plan.features }}
<li class="flex items-center">
<svg class="w-5 h-5 {{ if $plan.featured }}text-white{{ else }}text-green-500{{ end }} mr-2" fill="currentColor" viewBox="0 0 20 20">
<path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd"></path>
</svg>
<span class="{{ if not $plan.featured }}text-gray-600{{ end }}">{{ . }}</span>
</li>
{{ end }}
</ul>
{{ with .additional_description }}
<div class="text-sm text-gray-500">{{ . }}</div>
{{ end }}
<a href="{{ $plan.button.url }}" class="mt-4 text-center w-full px-5 py-3 rounded-lg {{ if $plan.featured }}bg-white text-primary-600 hover:bg-gray-100{{ else }}bg-primary-400 text-white hover:bg-primary-700{{ end }} font-medium transition duration-300">
{{ $plan.button.text }}
</a>
</ul>
{{ with .additional_description }}
<div class="text-sm {{ if $plan.featured }}text-white{{ else }}text-gray-500{{ end }}">{{ . }}</div>
{{ end }}
<a href="{{ $plan.button.url }}" class="mt-4 text-center w-full px-5 py-3 rounded-lg {{ if $plan.featured }}bg-white text-primary-600 hover:bg-gray-100{{ else }}bg-primary-400 text-white hover:bg-primary-700{{ end }} font-medium transition duration-300">
{{ $plan.button.text }}
</a>
</div>
{{ end }}
</div>