AstroTan : un site vitrine + CMS que tu installes chez toi
Template site vitrine : Astro, dashboard TanStack, backend Convex. Tu clones, tu héberges, tu écris tes pages en fichiers.
AstroTan n'est pas un site que quelqu'un héberge pour toi. C'est un template : tu clones le dépôt, tu pointes ton propre déploiement Convex, tes domaines et un VPS, puis tu écris tes pages en fichiers .astro. Le dashboard décide qui doit trouver une page. Jamais ce qu'elle contient.
Trois morceaux, une pile :
- le site public, Astro 7 en rendu serveur ;
- l'administration, TanStack Start et React 19 ;
- Convex, partagé, pour les données, l'auth et les articles.
Docker et Traefik posent le tout sur une machine. Le rollback rejoue le pipeline sur un sha, pas les images seules : convex deploy a déjà remplacé functions et schéma.
Pour qui c'est fait
Pour une agence ou un indépendant qui livre des sites vitrine, et qui en a assez de WordPress plus dix extensions pour le SEO, les cookies et le formulaire. Tu sais lire un fichier. Tu ne veux pas qu'un visiteur charge 400 ko de JavaScript pour une page de 26 ko.
Ce n'est pas un constructeur de pages dans le navigateur. Si tu cherches Elementor, passe ton chemin. Si tu veux que le design vive dans le code, et le référencement dans l'admin, c'est le bon outil.
Ce qu'une page est, ce qu'un article est
Une page est son fichier. Le balisage, la mise en page et les mots s'écrivent depuis une maquette. La ligne en base porte le slug, le titre, le statut, le SEO et le GEO. Trois modèles de contenu ont été essayés puis retirés (blocs, Markdown de page, champs déclarés). Chacun refaisait plus mal ce que le fichier fait déjà.
Un article, lui, porte son texte en base. Un billet est du contenu. L'éditeur riche du dashboard écrit de l'HTML, assaini avant d'atteindre un visiteur. C'est le seul endroit du template où la base garde du corps.
Ce que l'administration décide
Publication, aperçu à la vraie URL (jeton HMAC sur le slug, jamais une route parallèle), balises title et description, résumé GEO pour les moteurs de réponse, FAQ en JSON-LD, mot-clé cible pour DataForSEO plus tard. L'accès est sur invitation seule : pas d'inscription ouverte, pas d'OAuth. Le rôle vit sur l'utilisateur Better Auth. Chaque mutation le revérifie. L'interface masque, elle ne décide pas.
Un brouillon n'est jamais public. Le site n'a ni session ni clé d'administration. Il n'appelle que des queries qui filtrent status === "published" côté serveur. Connaître l'adresse ne suffit pas à lire le brouillon.
La pile, sans promesse en trop
Astro 7, adaptateur Node standalone. TanStack Start pour le dashboard ; TanStack Query n'est pas dans le dépôt, Convex pousse déjà les mises à jour. Better Auth en installation locale. Umami auto-hébergé pour l'audience, sans cookie. Consentement et pixels déclarés : aucun tag tiers n'est écrit dans le HTML avant une réponse.
Les tarifs et le formulaire sont sur le site. La page d'accueil dit la même chose que celle-ci, plus court.