add static builder

This commit is contained in:
Thibaud Dauce
2026-02-18 17:23:24 +01:00
parent e60f150611
commit 1561c07432
155 changed files with 161211 additions and 12 deletions

View File

@@ -0,0 +1,33 @@
{% extends "default.html" %}
{% block content %}
<main role="main" class="container space-y-12">
<div class="space-y-3">
<h2 class="text-xl font-semibold text-gray-800 leading-none">
Travail…
</h2>
<p class="prose">
Je suis actuellement freelance <a href="https://laravel.com">Laravel</a> (développement et formation).<br>
Je travaille pour la plateforme publique <a href="https://data.gouv.fr">data.gouv.fr</a> en Python.<br>
J'enseigne également la programmation <a href="https://www.youtube.com/user/tdauce">sur YouTube</a> et <a href="https://www.formation-laravel.fr">en entreprise</a>.<br>
J'ai co-fondé <a href="https://www.quantic-telecom.net">Quantic Telecom</a>, un fournisseur d'accès à Internet.<br>
</p>
</div>
<div class="space-y-3">
<h2 class="text-xl font-semibold text-gray-800 leading-none">
Lectures…
</h2>
<p class="prose">
<a href="https://fr.wikipedia.org/wiki/La_Roue_du_temps">La Roue du temps</a> de Robert Jordan sur ma <a href="https://www.fnac.com/Liseuse-numerique-Kobo-by-Fnac-Libra-H2O-7-8-Go-H2O-Noir/a13681417/w-4">Kobo Libra H2O</a>.
</p>
</div>
<div class="space-y-3">
<h2 class="text-xl font-semibold text-gray-800 leading-none">
Autres…
</h2>
<p class="prose">
Je lance actuellement <a href="https://moulin.olla.fr">un espace de coworking et une salle de bloc</a> dans mon village.
</p>
</div>
</main>
{% endblock content %}

View File

@@ -0,0 +1,58 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>{{ title }} — Thibaud Ollagnier</title>
<link rel="stylesheet" href="/css/app.css"/>
<link rel="alternate" type="application/rss+xml" title="Thibaud Dauce" href="/feed.xml">
<link rel="shortcut icon" href="/images/favicon.png">
<meta property="og:title" content="{{ title }}">
<meta name="twitter:card" content="summary">
<meta name="twitter:site" content="@ThibaudDauce" />
{% if description %}
<meta property="og:description" content="{{ description }}">
{% endif %}
</head>
<body class="overflow-x-hidden bg-gray-100 text-black font-serif leading-normal min-h-screen flex flex-col py-6 sm:py-12">
<header class="container mb-12 space-y-4">
<div>
<h2 class="sm:text-lg font-normal flex items-center gap-2">
<a href="/" class="text-gray-900">Thibaud Ollagnier</a>
<a href="https://discordapp.com/invite/tPtVM9V">
<svg xmlns="http://www.w3.org/2000/svg" class="fill-current text-gray-700 size-5" viewBox="0 0 245 240"><path d="M104.4 103.9c-5.7 0-10.2 5-10.2 11.1s4.6 11.1 10.2 11.1c5.7 0 10.2-5 10.2-11.1.1-6.1-4.5-11.1-10.2-11.1zM140.9 103.9c-5.7 0-10.2 5-10.2 11.1s4.6 11.1 10.2 11.1c5.7 0 10.2-5 10.2-11.1s-4.5-11.1-10.2-11.1z"/><path d="M189.5 20h-134C44.2 20 35 29.2 35 40.6v135.2c0 11.4 9.2 20.6 20.5 20.6h113.4l-5.3-18.5 12.8 11.9 12.1 11.2 21.5 19V40.6c0-11.4-9.2-20.6-20.5-20.6zm-38.6 130.6s-3.6-4.3-6.6-8.1c13.1-3.7 18.1-11.9 18.1-11.9-4.1 2.7-8 4.6-11.5 5.9-5 2.1-9.8 3.5-14.5 4.3-9.6 1.8-18.4 1.3-25.9-.1-5.7-1.1-10.6-2.7-14.7-4.3-2.3-.9-4.8-2-7.3-3.4-.3-.2-.6-.3-.9-.5-.2-.1-.3-.2-.4-.3-1.8-1-2.8-1.7-2.8-1.7s4.8 8 17.5 11.8c-3 3.8-6.7 8.3-6.7 8.3-22.1-.7-30.5-15.2-30.5-15.2 0-32.2 14.4-58.3 14.4-58.3 14.4-10.8 28.1-10.5 28.1-10.5l1 1.2c-18 5.2-26.3 13.1-26.3 13.1s2.2-1.2 5.9-2.9c10.7-4.7 19.2-6 22.7-6.3.6-.1 1.1-.2 1.7-.2 6.1-.8 13-1 20.2-.2 9.5 1.1 19.7 3.9 30.1 9.6 0 0-7.9-7.5-24.9-12.7l1.4-1.6s13.7-.3 28.1 10.5c0 0 14.4 26.1 14.4 58.3 0 0-8.5 14.5-30.6 15.2z"/></svg>
</a>
</h2>
<h1 class="text-xl sm:text-2xl font-normal">{{ title }}</h1>
</div>
<nav class="flex items-center gap-3 text-sm sm:text-base leading-none">
<a href="/" class="font-semibold {% if blog %} text-black {% else %} text-gray-600 hover:text-black {% endif %}">Blog</a>
<span class="hidden sm:inline size-1 rounded-full bg-gray-500"></span>
<a href="/talks.html" class="font-semibold {% if talks %} text-black {% else %} text-gray-600 hover:text-black {% endif %}">Conférences</a>
<span class="hidden sm:inline size-1 rounded-full bg-gray-500"></span>
<a href="https://www.youtube.com/user/tdauce/" class="font-semibold text-gray-600 hover:text-black">Vidéos</a>
<span class="hidden sm:inline size-1 rounded-full bg-gray-500"></span>
<a href="/about.html" class="font-semibold {% if about %} text-black {% else %} text-gray-600 hover:text-black {% endif %}">À propos</a>
</nav>
</header>
{% block content %}
{% endblock content %}
<footer class="container py-12 mt-12 text-sm text-gray-800">
<p>
Ce blog est généré statiquement en Rust. Si vous trouvez une faute ou un problème, <a href="https://github.com/ThibaudDauce/thibaud.dauce.fr" class="text-indigo-600 italic underline">vous pouvez contribuer via Github</a>.
</p>
</footer>
</body>
</html>

View File

@@ -0,0 +1,46 @@
{% extends "default.html" %}
{% block content %}
<div id="map" class="w-full" style="height: 50rem"></div>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/leaflet.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/leaflet.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet-gpx/1.7.0/gpx.min.js"></script>
<script>
var map = L.map('map').setView(new L.LatLng(46.498, 2.197), 7);
var googleSat = L.tileLayer('https://{s}.google.com/vt/lyrs=s,h&x={x}&y={y}&z={z}', {
maxZoom: 20,
subdomains: ['mt0', 'mt1', 'mt2', 'mt3']
}).addTo(map);
function loadGPX(trace, color, popup) {
new L.GPX('/traces/' + trace, {
async: true,
marker_options: {
iconSize: [11, 15],
shadowSize: [16.6, 16.6],
iconAnchor: [5.3, 15],
shadowAnchor: [5.3, 15.6],
startIconUrl: '/images/pin-icon-start.png',
endIconUrl: '/images/pin-icon-end.png',
shadowUrl: '/images/pin-shadow.png',
},
polyline_options: {
color: color,
opacity: 1,
weight: 4,
lineCap: 'round'
}
}).on('addpoint', function(e) {
e.target.bindPopup(popup)
}).addTo(map)
}
{% for trip in trips %}
{% for trace in trip.traces %}
loadGPX('{{ trace.path | safe }}', '{{ trip.color }}', "<b>{{ trip.type_as_string }} {{ trip.name }} de {{ trip.date }}</b><br>Distance : {{ trip.distance_format }}<br>Dénivelé: +{{ trip.elevation_positive_format }} | -{{ trip.elevation_negative_format }}<br><br><b>Segment {{ trace.name }}</b><br>Distance : {{ trace.distance_format }}<br>Dénivelé: +{{ trace.elevation_positive_format }} | -{{ trace.elevation_negative_format }}");
{% endfor %}
{% endfor %}
</script>
{% endblock content %}

View File

@@ -0,0 +1,30 @@
{% extends "default.html" %}
{% block content %}
<main role="main" class="container space-y-12">
{% for post in posts | reverse %}
<div class="space-y-2">
<h2 class="flex flex-col gap-2">
<span class="text-sm font-semibold text-gray-600 leading-none whitespace-nowrap">
{% if post.lang == "en" %}
{{ post.date_en }}
{% else %}
Le {{ post.date_fr }}
{% endif %}
</span>
<a href="{{ post.url }}" class="text-xl font-semibold text-gray-800 leading-none hover:underline">
{{ post.title }}
</a>
</h2>
{% if loop.index < 20 %}
<div class="prose">
{% if post.description %}
{{ post.description }}
{% endif %}
</div>
{% endif %}
</div>
{% endfor %}
</main>
{% endblock content %}

View File

@@ -0,0 +1,19 @@
{% extends "default.html" %}
{% block content %}
<main role="main" class="container space-y-6">
<p class="text-sm text-gray-600 italic">
{% if post.lang == "en" %}
Published {{ post.date_en }}
{% else %}
Publié le {{ post.date_fr }}
{% endif %}
</p>
<div class="prose">
{{ post.html | safe }}
</div>
</main>
{% endblock content %}

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<title>Thibaud Dauce</title>
<link>https://thibaud.dauce.fr</link>
<description><![CDATA[All Thibaud Dauce's articles]]></description>
<atom:link href="https://thibaud.dauce.fr/feed.xml" rel="self" type="application/rss+xml" />
<lastBuildDate>{{ latest_post.date_rss }}</lastBuildDate>
{% for post in posts | reverse %}
<item>
<title><![CDATA[{{ post.title|safe }}]]></title>
<link>https://thibaud.dauce.fr{{ post.url|safe }}</link>
<description><![CDATA[{{ post.html|safe }}]]></description>
<pubDate>{{ post.date_rss }}</pubDate>
<guid>https://thibaud.dauce.fr{{ post.url|safe }}</guid>
<dc:creator>Thibaud Dauce</dc:creator>
</item>
{% endfor %}
</channel>
</rss>

View File

@@ -0,0 +1,43 @@
{% extends "default.html" %}
{% block content %}
<main role="main" class="container space-y-16">
{% for talk in talks | reverse %}
<div class="space-y-4">
<h2 class="flex flex-col gap-2">
<span class="text-sm font-semibold text-gray-600 leading-none whitespace-nowrap">
Le {{ talk.date_fr }}
</span>
<span class="text-xl font-semibold text-gray-800 leading-none">
{{ talk.title }}
</span>
</h2>
<div class="prose">
{{ talk.html | safe }}
</div>
<div class="flex gap-4">
{% if talk.slides %}
<a href="{{ talk.slides }}" class="flex items-center gap-1 text-sm font-semibold text-gray-800">
<svg class="size-4 fill-current" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path d="M0 4c0-1.1.9-2 2-2h7l2 2h7a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V4zm2 2v10h16V6H2z"/></svg>
<span>Slides</span>
</a>
{% endif %}
{% if talk.video %}
<a href="{{ talk.video }}" class="flex items-center gap-1 text-sm font-semibold text-gray-800">
<svg class="size-4 fill-current" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path d="M2.93 17.07A10 10 0 1 1 17.07 2.93 10 10 0 0 1 2.93 17.07zm12.73-1.41A8 8 0 1 0 4.34 4.34a8 8 0 0 0 11.32 11.32zM7 6l8 4-8 4V6z"/></svg>
<span>Video</span>
</a>
{% endif %}
{% if talk.tweet %}
<a href="{{ talk.tweet }}" class="flex items-center gap-1 text-sm font-semibold text-gray-800">
<svg class="size-4 fill-current" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1684 408q-67 98-162 167 1 14 1 42 0 130-38 259.5t-115.5 248.5-184.5 210.5-258 146-323 54.5q-271 0-496-145 35 4 78 4 225 0 401-138-105-2-188-64.5t-114-159.5q33 5 61 5 43 0 85-11-112-23-185.5-111.5t-73.5-205.5v-4q68 38 146 41-66-44-105-115t-39-154q0-88 44-163 121 149 294.5 238.5t371.5 99.5q-8-38-8-74 0-134 94.5-228.5t228.5-94.5q140 0 236 102 109-21 205-78-37 115-142 178 93-10 186-50z"/></svg>
<span>Tweet</span>
</a>
{% endif %}
</div>
</div>
{% endfor %}
</main>
{% endblock content %}