feat: Ajout de la boutique
|
@ -2,4 +2,4 @@ public
|
|||
resources
|
||||
node_modules
|
||||
IMG
|
||||
.env
|
||||
.hugo_build.lock
|
||||
|
|
|
@ -40,6 +40,15 @@ $gutterXS: 10px
|
|||
margin-bottom: 0
|
||||
padding-bottom: 0
|
||||
|
||||
.button
|
||||
display: inline-block
|
||||
background-color: #0c9cfd
|
||||
color: white
|
||||
text-decoration: none
|
||||
padding: .7rem 1rem
|
||||
margin: 1rem 0
|
||||
border-radius: .2rem
|
||||
|
||||
@media screen and (max-width: 600px)
|
||||
.card
|
||||
margin: $gutterXS 0
|
||||
|
|
|
@ -128,4 +128,4 @@ a
|
|||
|
||||
.rev
|
||||
unicode-bidi: bidi-override
|
||||
direction: rtl
|
||||
direction: rtl
|
|
@ -1,6 +0,0 @@
|
|||
#!/bin/sh
|
||||
while inotifywait -e create,moved_to,delete,modify -r ./content/ ./static/; do
|
||||
sleep 20
|
||||
npm run build && npm run ftp-deploy
|
||||
date
|
||||
done
|
|
@ -0,0 +1,15 @@
|
|||
---
|
||||
title: Croquer le handicap pour croquer la vie !
|
||||
description: Bienvenue sur le site internet de l'Histoire d'un Pied
|
||||
image: boutique.png
|
||||
composants:
|
||||
- boutique
|
||||
- a-propos
|
||||
---
|
||||
|
||||
# Croquer le handicap pour croquer la vie !
|
||||
|
||||
Vous pouvez dès à présent vous procurer les Tome 1 et 2 en ligne ! Si vous le souhaitez, je peux dédicacer les ouvrages avec grand plaisir.
|
||||
|
||||
Le Tome 3 est en cours...
|
||||
Pas de date de sortie prévue, mais j'y travaille dur.
|
|
@ -1,9 +0,0 @@
|
|||
---
|
||||
title: Actualités
|
||||
weight: 2
|
||||
bg_colored: true
|
||||
---
|
||||
|
||||
## ACTUALITÉS
|
||||
|
||||
{{< actu >}}
|
|
@ -1,19 +0,0 @@
|
|||
---
|
||||
title: À propos
|
||||
weight: 3
|
||||
---
|
||||
|
||||
## À PROPOS
|
||||
|
||||
{{< grid class="-middle" >}}
|
||||
{{< cell class="-4of12 -center" >}}
|
||||
<img src="./accueil/apropos.png" alt="Le livre" width="180" loading="lazy" />
|
||||
{{< /cell >}}
|
||||
{{< cell class="-8of12 " markdown="true" >}}
|
||||
Après des études de graphisme, je suis embauchée en tant que graphiste chez *Five*, une agence de communication spécialisée dans le domaine de la beauté et l’édition. Le 6 novembre 2008, j’ai dû arrêter mon travail pendant plusieurs mois suite à l’histoire que je m’apprête à vous raconter :). Je me suis alors noyée dans l’illustration ! Quel bonheur !
|
||||
|
||||
J’ai ensuite repris mon travail mais j’ai quitté rapidement mon agence pour devenir freelance et aujourd’hui je suis toujours en free et ravie ! Ce statut m’a permis de quitter Paris avec mon compagnon.
|
||||
|
||||
Début 2016, nous sommes partis pour 2 ans de nomadisme, une incroyable expérience de voyager tout en travaillant ! Aujourd’hui je suis installée avec ma famille, dans un petit coin de paradis tout près de Roanne.
|
||||
{{< /cell >}}
|
||||
{{< /grid >}}
|
|
@ -1,15 +0,0 @@
|
|||
---
|
||||
|
||||
---
|
||||
|
||||
{{< grid class="-middle" >}}
|
||||
{{< cell class="-6of12 -center" >}}
|
||||
<img src="./accueil/bienvenue.png" alt="Le livre" width="480" />
|
||||
{{< /cell >}}
|
||||
{{< cell class="-6of12" markdown="true" >}}
|
||||
|
||||
# Croquer le handicap pour croquer la vie !
|
||||
|
||||
Je vous invite à sauter à pieds joints dans mon nouveau site "Histoire d’un pied" et à suivre l’aventure de l'édition de mes carnets. Au fil du temps, je vous tiendrai au courant des actus et avancées de mon projet !
|
||||
{{< /cell >}}
|
||||
{{< /grid >}}
|
|
@ -1,28 +0,0 @@
|
|||
---
|
||||
title: Contact
|
||||
weight: 4
|
||||
bg_colored: true
|
||||
---
|
||||
|
||||
## CONTACT
|
||||
|
||||
{{< grid class="-top" >}}
|
||||
{{< cell class="-4of12" >}}
|
||||
|
||||
<p>
|
||||
Anne-Sophie Gillet<br />
|
||||
{{< cloakemail address="une@histoiredunpied.com" >}}<br />
|
||||
{{< cloakemail address="06 43 36 54 83" protocol="tel" >}}
|
||||
</p>
|
||||
{{< /cell >}}
|
||||
{{< cell class="-8of12 -right" >}}
|
||||
<p>
|
||||
Suivez-moi sur <a href="https://www.facebook.com/AnneSophieGilletLivre/">facebook</a>
|
||||
</p>
|
||||
<p>
|
||||
Réalisé par <a href="https://weko.io">Weko</a> de façon éco-responsable<br />
|
||||
Hébergé avec sobriété par <a href="https://resilien.fr">RésiLien</a><br />
|
||||
© {{< year >}} Histoire d'un Pied
|
||||
</p>
|
||||
{{< /cell >}}
|
||||
{{< /grid >}}
|
Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 86 KiB |
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
title: Croquer le handicap pour croquer la vie !
|
||||
description: Voici mon blog
|
||||
image: actualites/bienvenue.png
|
||||
composants:
|
||||
- actualites
|
||||
---
|
||||
|
||||
# Croquer le handicap pour croquer la vie !
|
||||
|
||||
Je vous invite à sauter à pieds joints dans mon nouveau site « Histoire d’un pied » et à suivre l’aventure de l'édition de mes carnets. Au fil du temps, je vous tiendrai au courant des actus et avancées de mon projet !
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 133 KiB |
After Width: | Height: | Size: 368 KiB |
|
@ -0,0 +1,15 @@
|
|||
---
|
||||
title: Tome 1 - Comment t'as fait ?
|
||||
image: Histoire d'un Pied - Tome 1.png
|
||||
image_title: "Visuel du Tome 1 d'Histoire d'un Pied"
|
||||
weight: 1
|
||||
link: https://buy.stripe.com/7sIbKSfqU0q5gb6dQQ
|
||||
---
|
||||
|
||||
Touchée par une terrible épreuve en 2008, l’histoire d’un pied a débuté. J’ai mis à profit mes compétences de graphiste pour raconter en images deux ans de ma vie, concentrés en 20 carnets.
|
||||
|
||||
C'est 12 ans plus tard en juillet 2020, que j'ai décidé d'éditer ce premier tome afin de partager mon histoire à un plus large public.
|
||||
|
||||
Au début dessiner me permettait de passer le temps qui s’est arrêté d’un coup ! Puis cela est devenu une véritable addiction et même une thérapie. J’y raconte mes journées, mes émotions, mes doutes, mes questionnements, et la découverte du milieu hospitalier.
|
||||
|
||||
Une immersion à l'Hopital Beaujon !
|
After Width: | Height: | Size: 345 KiB |
|
@ -0,0 +1,16 @@
|
|||
---
|
||||
title: Tome 2 - J'ai dit oui !
|
||||
image: Histoire d'un Pied - Tome 2.png
|
||||
image_title: "Visuel du Tome 2 d'Histoire d'un Pied"
|
||||
weight: 2
|
||||
link: https://buy.stripe.com/7sI7uC1A44GlbUQbIJ
|
||||
---
|
||||
|
||||
Touchée par une terrible épreuve en 2008, l’histoire d’un pied a débuté. J’ai mis à profit mes compétences de graphiste pour raconter en images deux ans de ma vie, concentrés en 20 carnets.
|
||||
|
||||
En juillet 2020, j'ai publié le premier Tome et un an plus tard le Tome 2 est née.
|
||||
|
||||
Venez découvrir dans ce Tome 2, la vie en centre de rééducation ponctuée de joie, de peine,
|
||||
de résilience et beaucoup d'humour malgré la thématique du handicap abordée.
|
||||
|
||||
Une immersion à Valenton !
|
After Width: | Height: | Size: 363 KiB |
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
title: Histoire d'un Pied - Tome 1 et 2
|
||||
image: Histoire d'un Pied - Tome 1 et 2.png
|
||||
image_title: "J'aurais pu sombrer mais j'ai dessiné !"
|
||||
weight: 3
|
||||
link: https://buy.stripe.com/aEU5mu7Ys0q57EA5km
|
||||
---
|
||||
|
||||
Le pack Tome 1 et 2. Le suspens étant à son comble à la fin du 1, n'hésitez pas à vous procurer les deux dès à présent. Il sera difficile d'attendre !
|
||||
|
||||
Bonne lecture
|
|
@ -1,17 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
# -e Exit immediately if a command exits with a non-zero status.
|
||||
# -u Treat unset variables as an error when substituting.
|
||||
set -eu
|
||||
|
||||
START=`date +%s`
|
||||
|
||||
echo "😎 Start build histoiredunpied"
|
||||
|
||||
echo "- build image 🚀"
|
||||
docker build . -t kosssi/histoiredunpied
|
||||
docker tag kosssi/histoiredunpied registry.weko.io/histoiredunpied
|
||||
docker push registry.weko.io/histoiredunpied
|
||||
|
||||
END=`date +%s`
|
||||
echo "✨ Done in $((END-START))s"
|
|
@ -0,0 +1,7 @@
|
|||
{{ define "main" }}
|
||||
{{ partial "intro" . }}
|
||||
{{ $page := . }}
|
||||
{{ range .Params.composants }}
|
||||
{{ partial . $page }}
|
||||
{{ end }}
|
||||
{{ end }}
|
|
@ -0,0 +1,7 @@
|
|||
{{ define "main" }}
|
||||
{{ partial "intro" . }}
|
||||
{{ $page := . }}
|
||||
{{ range .Params.composants }}
|
||||
{{ partial . $page }}
|
||||
{{ end }}
|
||||
{{ end }}
|
|
@ -0,0 +1,13 @@
|
|||
{{ define "main" }}
|
||||
{{ with .Site.GetPage "/accueil" }}
|
||||
{{ $pages := .Resources.ByType "page" }}
|
||||
{{ range sort $pages "Params.weight" }}
|
||||
<div class="bg{{if isset .Params "bg_colored" }} colored{{end}}">
|
||||
{{ with .File }}<a id="_{{ .BaseFileName }}" class="ancre"></a>{{ end }}
|
||||
<div class="container">
|
||||
{{ .Content }}
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
|
@ -0,0 +1,13 @@
|
|||
{{ define "main" }}
|
||||
{{ with .Site.GetPage "/boutique" }}
|
||||
{{ $pages := .Resources.ByType "page" }}
|
||||
{{ range sort $pages "Params.weight" }}
|
||||
<div class="bg{{if isset .Params "bg_colored" }} colored{{end}}">
|
||||
{{ with .File }}<a id="_{{ .BaseFileName }}" class="ancre"></a>{{ end }}
|
||||
<div class="container">
|
||||
{{ .Content }}
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
|
@ -0,0 +1,6 @@
|
|||
<div class="bg">
|
||||
<a id="_apropos" class="ancre"></a>
|
||||
<div class="container">
|
||||
<h2 id="à-propos">À PROPOS</h2>
|
||||
<div class="grid -middle">
|
||||
<div class="cell -4of12 -center"><img src="./apropos.png" alt="Le livre" loading="lazy" width="180"></div><div class="cell -8of12"><p>Après des études de graphisme, je suis embauchée en tant que graphiste chez <em>Five</em>, une agence de communication spécialisée dans le domaine de la beauté et l’édition. Le 6 novembre 2008, j’ai dû arrêter mon travail pendant plusieurs mois suite à l’histoire que je m’apprête à vous raconter :). Je me suis alors noyée dans l’illustration ! Quel bonheur !</p><p>J’ai ensuite repris mon travail mais j’ai quitté rapidement mon agence pour devenir freelance et aujourd’hui je suis toujours en free et ravie ! Ce statut m’a permis de quitter Paris avec mon compagnon.</p><p>Début 2016, nous sommes partis pour 2 ans de nomadisme, une incroyable expérience de voyager tout en travaillant ! Aujourd’hui je suis installée avec ma famille, dans un petit coin de paradis tout près de Roanne.</p></div></div></div></div>
|
|
@ -0,0 +1,30 @@
|
|||
<div class="bg colored">
|
||||
<a id="_contact" class="ancre"></a>
|
||||
<div class="container">
|
||||
<h2 id="contact">ACTUALITÉS</h2>
|
||||
<div class="news">
|
||||
{{ with .Site.GetPage "/actu" }}
|
||||
{{ $actu := . }}
|
||||
{{ range .Resources.ByType "page" }}
|
||||
{{ if or (not .Params.draft) (eq hugo.Environment "development") }}
|
||||
<article class="card grid -middle -even-reverse">
|
||||
<div class="card-image cell -5of12">
|
||||
{{ $src := $actu.Resources.GetMatch (printf "*%s/%s*" (path.Base .File.Dir) (.Params.Image)) }}
|
||||
{{ if $src }}
|
||||
{{ $image := $src.Fill "432x300 Center" }}
|
||||
{{ $alt := index .Params "image_title" | default (index .Params "title") }}
|
||||
<img src="{{ $image.RelPermalink }}" alt="{{ $alt }}" loading="lazy" />
|
||||
{{ end }}
|
||||
</div>
|
||||
<div class="card-body cell -7of12">
|
||||
<h3>{{ .Title }}</h3>
|
||||
<time datetime="{{ .Date.Format "2006-01-02" }}">{{ .Date.Day }} {{ index $.Site.Data.mois (printf "%d" .Date.Month) }} {{ .Date.Year }}</time>
|
||||
{{ .Content }}
|
||||
</div>
|
||||
</article>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,30 @@
|
|||
<div class="bg colored">
|
||||
<a id="_contact" class="ancre"></a>
|
||||
<div class="container">
|
||||
<h2 id="contact">BOUTIQUE</h2>
|
||||
<div class="news">
|
||||
{{ with .Site.GetPage "/livres" }}
|
||||
{{ $actu := . }}
|
||||
{{ range .Resources.ByType "page" }}
|
||||
{{ if or (not .Params.draft) (eq hugo.Environment "development") }}
|
||||
<article class="card grid -middle -even-reverse">
|
||||
<div class="card-image cell -5of12">
|
||||
{{ $src := $actu.Resources.GetMatch (printf "*%s/%s*" (path.Base .File.Dir) (.Params.Image)) }}
|
||||
{{ if $src }}
|
||||
{{ $image := $src.Fill "432x300 Center" }}
|
||||
{{ $alt := index .Params "image_title" | default (index .Params "title") }}
|
||||
<img src="{{ $image.RelPermalink }}" alt="{{ $alt }}" loading="lazy" />
|
||||
{{ end }}
|
||||
</div>
|
||||
<div class="card-body cell -7of12">
|
||||
<h3>{{ .Title }}</h3>
|
||||
{{ .Content }}
|
||||
<a href="{{ .Params.link }}" class="button">Acheter</a>
|
||||
</div>
|
||||
</article>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,3 @@
|
|||
<div class="bg colored"><a id="_contact" class="ancre"></a><div class="container"><h2 id="contact"><abbr>CONTACT</abbr></h2><div class="grid -top"><div class="cell -4of12"><p>Anne-Sophie Gillet<br><style type="text/css">#wjs-918f693d.cloaked-e-mail:before{content:attr(data-domain)"\0040" attr(data-user);unicode-bidi:bidi-override;direction:rtl}</style><span class="cloaked-e-mail" data-user="enu" data-domain="moc.deipnuderiotsih" id="wjs-918f693d"></span>
|
||||
<script id="id-918f693d">var scriptTag=document.getElementById("id-918f693d"),link=document.createElement("a"),address="enu".split("").reverse().join("")+"@"+"moc.deipnuderiotsih".split("").reverse().join("");link.href="mailto:"+address,link.innerText=address.split("?")[0],scriptTag.parentElement.insertBefore(link,scriptTag.previousElementSibling),scriptTag.parentElement.removeChild(scriptTag.previousElementSibling)</script><br><style type="text/css">#wjs-9e87a013.cloaked-e-mail:before{content:attr(data-user);unicode-bidi:bidi-override;direction:rtl}</style><span class="cloaked-e-mail" data-user="38 45 63 34 60" id="wjs-9e87a013"></span>
|
||||
<script id="id-9e87a013">var scriptTag=document.getElementById("id-9e87a013"),link=document.createElement("a"),address="38 45 63 34 60".split("").reverse().join("");link.href="tel:"+address,link.innerText=address.split("?")[0],scriptTag.parentElement.insertBefore(link,scriptTag.previousElementSibling),scriptTag.parentElement.removeChild(scriptTag.previousElementSibling)</script></p></div><div class="cell -8of12 -right"><p>Suivez-moi sur <a href="https://www.facebook.com/AnneSophieGilletLivre/">facebook</a></p><p>Réalisé par <a href="https://weko.io">Weko</a> de façon éco-responsable<br>Hébergé avec sobriété par <a href="https://resilien.fr">RésiLien</a><br>© 2023 Histoire d'un Pied</p></div></div></div></div>
|
|
@ -5,16 +5,15 @@
|
|||
</a>
|
||||
<nav class="menu" role="navigation">
|
||||
<ul>
|
||||
{{ with .Site.GetPage "/accueil" }}
|
||||
{{ $pages := .Resources.ByType "page" }}
|
||||
{{ range sort $pages "Params.weight" }}
|
||||
{{ if .Title }}
|
||||
<li>
|
||||
<a class="navigation-lien" href="#_{{ .File.BaseFileName }}">{{ .Title }}</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
<li>
|
||||
<a class="navigation-lien" href="/">Boutique</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="navigation-lien" href="/actualites/">Actualités</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="navigation-lien" href="/#_contact">Contact</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
<div class="bg">
|
||||
<div class="container">
|
||||
<div class="grid -middle">
|
||||
<div class="cell -6of12 -center">
|
||||
<img src="{{ .Params.image }}" alt="Le livre" width="480" />
|
||||
</div>
|
||||
<div class="cell -6of12">
|
||||
{{ .Content }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,24 @@
|
|||
<div class="news">
|
||||
{{ with .Site.GetPage "/actu" }}
|
||||
{{ $actu := . }}
|
||||
{{ range .Resources.ByType "page" }}
|
||||
{{ if or (not .Params.draft) (eq hugo.Environment "development") }}
|
||||
<article class="card grid -middle -even-reverse">
|
||||
<div class="card-image cell -5of12">
|
||||
{{ $src := $actu.Resources.GetMatch (printf "*%s/%s*" (path.Base .File.Dir) (.Params.Image)) }}
|
||||
{{ if $src }}
|
||||
{{ $image := $src.Fill "432x300 Center" }}
|
||||
{{ $alt := index .Params "image_title" | default (index .Params "title") }}
|
||||
<img src="{{ $image.RelPermalink }}" alt="{{ $alt }}" loading="lazy" />
|
||||
{{ end }}
|
||||
</div>
|
||||
<div class="card-body cell -7of12">
|
||||
<h3>{{ .Title }}</h3>
|
||||
<time datetime="{{ .Date.Format "2006-01-02" }}">{{ .Date.Day }} {{ index $.Site.Data.mois (printf "%d" .Date.Month) }} {{ .Date.Year }}</time>
|
||||
{{ .Content }}
|
||||
</div>
|
||||
</article>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</div>
|
66
run
|
@ -1,66 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
# -e Exit immediately if a command exits with a non-zero status.
|
||||
# -u Treat unset variables as an error when substituting.
|
||||
set -eu
|
||||
|
||||
DOCKER_CONTEXT=vert
|
||||
START=`date +%s`
|
||||
BACKUP_DATE=`date +%Y%m%d`
|
||||
|
||||
logs_backup() {
|
||||
mkdir -p backups
|
||||
ssh $DOCKER_CONTEXT mkdir -p backups/histoiredunpied
|
||||
docker --context $DOCKER_CONTEXT run -t --rm -v $HOME/backups/histoiredunpied:/backup -v histoiredunpied-log-volume:/logs alpine:3.11.6 ash -c "cd /logs && tar cvf /backup/${BACKUP_DATE}_histoiredunpied_logs.tar ."
|
||||
ssh $DOCKER_CONTEXT "sudo chown kosssi:docker $HOME/backups/histoiredunpied/${BACKUP_DATE}_histoiredunpied_logs.tar"
|
||||
scp $DOCKER_CONTEXT:$HOME/backups/histoiredunpied/${BACKUP_DATE}_histoiredunpied_logs.tar backups
|
||||
}
|
||||
|
||||
logs_restore() {
|
||||
ssh $DOCKER_CONTEXT mkdir -p backups/histoiredunpied
|
||||
scp backups/${BACKUP_DATE}_histoiredunpied_logs.tar $DOCKER_CONTEXT:$HOME/backups/histoiredunpied/
|
||||
docker --context $DOCKER_CONTEXT run -t --rm -v $HOME/backups/histoiredunpied:/backup -v histoiredunpied-log-volume:/logs alpine:3.11.6 ash -c "cd /logs && tar xvf /backup/${BACKUP_DATE}_histoiredunpied_logs.tar --strip 1"
|
||||
}
|
||||
|
||||
logs_update() {
|
||||
docker --context $DOCKER_CONTEXT exec -it histoiredunpied-logs ash /bin/stats.sh generate
|
||||
}
|
||||
|
||||
help() {
|
||||
echo "💡 Aide"
|
||||
echo "-------"
|
||||
echo
|
||||
echo "Commandes :"
|
||||
echo "- ./run logs backup 📥 Sauvegarde les logs"
|
||||
echo "- ./run logs restore 📤 Restore les logs"
|
||||
echo "- ./run logs update 🌠 Mise à jour de GoAccess"
|
||||
echo
|
||||
}
|
||||
|
||||
if [ $# -ge 1 ]; then
|
||||
if [ $1 == "logs" ]; then
|
||||
if [ $# -ge 2 ]; then
|
||||
if [ $2 == "backup" ]; then
|
||||
echo "📥 Sauvegarde les logs"
|
||||
logs_backup
|
||||
elif [ $2 == "restore" ]; then
|
||||
echo "📤 Restore les logs"
|
||||
logs_restore
|
||||
elif [ $2 == "update" ]; then
|
||||
echo "🌠 Mise à jour de GoAccess"
|
||||
logs_update
|
||||
else
|
||||
help
|
||||
fi
|
||||
else
|
||||
help
|
||||
fi
|
||||
else
|
||||
help
|
||||
fi
|
||||
else
|
||||
help
|
||||
fi
|
||||
|
||||
END=`date +%s`
|
||||
echo "✨ Done in $((END-START))s"
|