{
    "ready": true,
    "site": {
        "id": 0,
        "domain": "alexisjanvier.net",
        "display_name": "Alexis Janvier",
        "primary_country_code": "FR",
        "category_name": "Personal: Portfolios & CVs"
    },
    "metrics": {
        "global_rank": 6226,
        "country_rank": 3182,
        "category_rank": 9,
        "daily_pageviews_per_visitor": 4.05,
        "daily_time_on_site_seconds": 327,
        "bounce_rate": 29.64,
        "search_visits_percent": 42.12,
        "total_sites_linking_in": 1,
        "monthly_unique_visitors": 192,
        "recorded_at": "2026-03-29 00:52:25"
    },
    "audit": {
        "score": 97
    },
    "traffic_sources": {
        "direct_percent": 29,
        "search_percent": 37.8,
        "social_percent": 4.84,
        "referral_percent": 12.58,
        "email_percent": 6.78,
        "paid_percent": 9
    },
    "seo_profile": {
        "backlinks_total": 1,
        "referring_domains": 1,
        "dofollow_backlinks_percent": 100,
        "organic_keywords": 88,
        "indexed_pages": 123,
        "page_speed_score": 100,
        "mobile_friendliness_score": 93,
        "authority_score": 49,
        "spam_risk_score": 27
    },
    "crawl_report": {
        "robots_status": 200,
        "sitemap_status": 200,
        "sitemap_total_urls": 123,
        "crawl_blocked": false,
        "crawl_blocked_by": "",
        "crawl_blocked_reason": "",
        "notes": [],
        "created_at": "2026-03-29 00:52:25"
    },
    "keywords": [
        {
            "keyword": "Alexis Janvier",
            "position": 18,
            "search_engine": "Estimated",
            "checked_at": "2026-04-16 20:24:07",
            "is_estimated": true
        },
        {
            "keyword": "Alexis Janvier personal: portfolios & cvs",
            "position": 20,
            "search_engine": "Estimated",
            "checked_at": "2026-04-16 20:24:07",
            "is_estimated": true
        },
        {
            "keyword": "Alexis Janvier reviews",
            "position": 22,
            "search_engine": "Estimated",
            "checked_at": "2026-04-16 20:24:07",
            "is_estimated": true
        },
        {
            "keyword": "alexis",
            "position": 24,
            "search_engine": "Estimated",
            "checked_at": "2026-04-16 20:24:07",
            "is_estimated": true
        },
        {
            "keyword": "janvier",
            "position": 26,
            "search_engine": "Estimated",
            "checked_at": "2026-04-16 20:24:07",
            "is_estimated": true
        },
        {
            "keyword": "alexisjanvier",
            "position": 28,
            "search_engine": "Estimated",
            "checked_at": "2026-04-16 20:24:07",
            "is_estimated": true
        }
    ],
    "rating": {
        "overall": 64,
        "label": "Healthy",
        "breakdown": [
            {
                "label": "Technical foundation",
                "score": 18,
                "max": 18
            },
            {
                "label": "Authority & trust",
                "score": 15,
                "max": 30
            },
            {
                "label": "Reach & market presence",
                "score": 3,
                "max": 18
            },
            {
                "label": "Search visibility",
                "score": 4,
                "max": 12
            },
            {
                "label": "Engagement & retention",
                "score": 9,
                "max": 10
            },
            {
                "label": "Channels & diversification",
                "score": 4,
                "max": 6
            },
            {
                "label": "Registry stability",
                "score": 5,
                "max": 6
            },
            {
                "label": "Quality system",
                "score": 100,
                "max": 100
            },
            {
                "label": "Reputation system",
                "score": 49,
                "max": 100
            },
            {
                "label": "Safety system",
                "score": 100,
                "max": 100
            },
            {
                "label": "Evidence confidence",
                "score": 98,
                "max": 100
            },
            {
                "label": "External intelligence",
                "score": 50,
                "max": 100
            }
        ],
        "authority_score": 51,
        "quality_score": 100,
        "reputation_score": 49,
        "safety_score": 100,
        "confidence_score": 98,
        "fraud_score": 0,
        "authority_signals": {
            "backlinks": 1,
            "referring_domains": 1,
            "organic_keywords": 88,
            "indexed_pages": 123,
            "monthly_visitors": 192,
            "global_rank": 6226,
            "engagement_score": 81,
            "crawl_quality_score": 100,
            "brand_completeness_score": 74,
            "link_diversity_score": 92,
            "technical_reliability_score": 97,
            "whois_score": 89,
            "whois_age_years": 20.9,
            "whois_stability_score": 100,
            "spam_penalty": 0
        },
        "whois_signals": {
            "age_years": 20.9,
            "days_to_expiry": 390,
            "days_since_last_registry_update": 34,
            "stability_score": 100,
            "registrar_changes": 0,
            "ownership_changes": 0,
            "nameserver_changes": 0,
            "status_changes": 0,
            "history_entries": 1,
            "privacy_protected": false,
            "dnssec_enabled": false,
            "has_registrant_country": false,
            "registrant_country": "",
            "nameserver_count": 2,
            "status_count": 1
        }
    },
    "authority_score": 51,
    "trust_score": 80,
    "domain_tags": {
        "primary_tag": "T",
        "primary_tag_score": 86,
        "primary_candidate": "T",
        "primary_candidate_score": 86,
        "tag_codes": "T,Uncertain",
        "tags": [
            {
                "code": "T",
                "label": "Trusted",
                "tone": "good",
                "description": "Strong trust, stability, and low-risk signals were detected.",
                "reason": "Low spam indicators plus strong trust, quality, registry, and stability signals were detected. Showing the stored external intelligence snapshot. New search and review intelligence only runs after a visitor uses Refresh data manually.",
                "message": "The site shows a reasonably trustworthy and stable profile.",
                "priority": 86,
                "score": 86,
                "match_percent": 86,
                "threshold_band": "strong"
            },
            {
                "code": "Uncertain",
                "label": "Uncertain",
                "tone": "unknown",
                "description": "External checks stayed inconclusive, so the model avoided a harder verdict.",
                "reason": "External checks stayed inconclusive, so the system kept an uncertainty buffer.",
                "message": "The evidence is materially mixed or partially corroborated, so the model is avoiding a harder verdict.",
                "priority": 68,
                "score": 68,
                "match_percent": 68,
                "threshold_band": "strong"
            }
        ],
        "tag_breakdown": [
            {
                "code": "T",
                "label": "Trusted",
                "tone": "good",
                "description": "Strong trust, stability, and low-risk signals were detected.",
                "reason": "Low spam indicators plus strong trust, quality, registry, and stability signals were detected. Showing the stored external intelligence snapshot. New search and review intelligence only runs after a visitor uses Refresh data manually.",
                "message": "The site shows a reasonably trustworthy and stable profile.",
                "priority": 86,
                "score": 86,
                "match_percent": 86,
                "threshold_band": "strong"
            },
            {
                "code": "Uncertain",
                "label": "Uncertain",
                "tone": "unknown",
                "description": "External checks stayed inconclusive, so the model avoided a harder verdict.",
                "reason": "External checks stayed inconclusive, so the system kept an uncertainty buffer.",
                "message": "The evidence is materially mixed or partially corroborated, so the model is avoiding a harder verdict.",
                "priority": 68,
                "score": 68,
                "match_percent": 68,
                "threshold_band": "strong"
            },
            {
                "code": "C",
                "label": "Caution",
                "tone": "caution",
                "description": "Signals are mixed or weak, so this domain should be treated carefully.",
                "reason": "Review carefully: mixed trust signals. Showing the stored external intelligence snapshot. New search and review intelligence only runs after a visitor uses Refresh data manually.",
                "message": "The current crawl does not show a meaningful caution match.",
                "priority": 0,
                "score": 0,
                "match_percent": 0,
                "threshold_band": "none"
            },
            {
                "code": "Crypto",
                "label": "Crypto drainer risk",
                "tone": "toxic",
                "description": "Wallet-connect or seed-phrase theft patterns were detected.",
                "reason": "Wallet-connect or seed-phrase theft patterns were detected.",
                "message": "No meaningful crypto-drainer signals were detected.",
                "priority": 0,
                "score": 0,
                "match_percent": 0,
                "threshold_band": "none"
            },
            {
                "code": "D",
                "label": "Dangerous",
                "tone": "toxic",
                "description": "Strong signs of phishing, malware, or other harmful behaviour were detected.",
                "reason": "Multiple high-risk signals pushed this domain into the dangerous range. Showing the stored external intelligence snapshot. New search and review intelligence only runs after a visitor uses Refresh data manually.",
                "message": "No meaningful dangerous-signal match was detected.",
                "priority": 0,
                "score": 0,
                "match_percent": 0,
                "threshold_band": "none"
            }
        ],
        "nsfw_score": 0,
        "trust_score": 81,
        "manual": {
            "has_changes": false,
            "verified_status": "",
            "tag_codes": "",
            "rating_delta": 0,
            "authority_delta": 0,
            "trust_delta": 0,
            "note": "",
            "adjusted_by": 0,
            "adjusted_at": "",
            "lock_scores": false,
            "lock_flags": false
        },
        "summary": "Trusted (86% match) because low spam indicators plus strong trust, quality, registry, and stability signals were detected. showing the stored external intelligence snapshot. new search and review intelligence only runs after a visitor uses refresh data manually.",
        "external_intel": {
            "domain": "alexisjanvier.net",
            "candidate_tag": "T",
            "checked_at": "2026-03-19T00:46:17+00:00",
            "status": "fresh",
            "snapshot_version": 6,
            "summary": "Showing the stored external intelligence snapshot. New search and review intelligence only runs after a visitor uses Refresh data manually.",
            "search_intelligence": {
                "queries": [
                    "site:linkedin.com \"alexisjanvier.net\" -site:alexisjanvier.net -site:www.alexisjanvier.net",
                    "site:crunchbase.com \"alexisjanvier.net\" -site:alexisjanvier.net -site:www.alexisjanvier.net",
                    "site:opencorporates.com \"alexisjanvier.net\" -site:alexisjanvier.net -site:www.alexisjanvier.net",
                    "site:trustpilot.com \"alexisjanvier.net\" -site:alexisjanvier.net -site:www.alexisjanvier.net",
                    "site:bbb.org \"alexisjanvier.net\" -site:alexisjanvier.net -site:www.alexisjanvier.net",
                    "site:companieshouse.gov.uk \"alexisjanvier.net\" -site:alexisjanvier.net -site:www.alexisjanvier.net",
                    "site:linkedin.com \"www.alexisjanvier.net\" -site:alexisjanvier.net -site:www.alexisjanvier.net",
                    "site:linkedin.com \"alexisjanvier\" -site:alexisjanvier.net -site:www.alexisjanvier.net",
                    "site:crunchbase.com \"alexisjanvier\" -site:alexisjanvier.net -site:www.alexisjanvier.net",
                    "site:opencorporates.com \"alexisjanvier\" -site:alexisjanvier.net -site:www.alexisjanvier.net",
                    "site:linkedin.com \"Alexis Janvier\" -site:alexisjanvier.net -site:www.alexisjanvier.net",
                    "site:crunchbase.com \"Alexis Janvier\" -site:alexisjanvier.net -site:www.alexisjanvier.net"
                ],
                "focused_queries": [
                    "site:linkedin.com \"alexisjanvier.net\" -site:alexisjanvier.net -site:www.alexisjanvier.net",
                    "site:crunchbase.com \"alexisjanvier.net\" -site:alexisjanvier.net -site:www.alexisjanvier.net",
                    "site:opencorporates.com \"alexisjanvier.net\" -site:alexisjanvier.net -site:www.alexisjanvier.net",
                    "site:trustpilot.com \"alexisjanvier.net\" -site:alexisjanvier.net -site:www.alexisjanvier.net",
                    "site:bbb.org \"alexisjanvier.net\" -site:alexisjanvier.net -site:www.alexisjanvier.net",
                    "site:companieshouse.gov.uk \"alexisjanvier.net\" -site:alexisjanvier.net -site:www.alexisjanvier.net"
                ],
                "relaxed_queries": [
                    "site:wikipedia.org \"alexisjanvier.net\"",
                    "site:en.wikipedia.org \"alexisjanvier.net\"",
                    "site:wikipedia.org \"alexisjanvier\"",
                    "site:en.wikipedia.org \"alexisjanvier\"",
                    "alexisjanvier linkedin",
                    "alexisjanvier crunchbase",
                    "alexisjanvier company profile",
                    "alexisjanvier reviews",
                    "alexisjanvier wikipedia"
                ],
                "providers": [
                    "duckduckgo"
                ],
                "provider_result_counts": {
                    "duckduckgo": 0
                },
                "provider_query_attempts": {
                    "duckduckgo": 1
                },
                "provider_error_counts": [],
                "results_found": 1,
                "external_results_found": 0,
                "used_direct_fallback": true,
                "results": [
                    {
                        "provider": "direct-domain-fallback",
                        "url": "https://alexisjanvier.net/",
                        "host": "alexisjanvier.net",
                        "title": "Alexis Janvier",
                        "snippet": "First-party fallback captured directly from the domain when public search engines returned no usable results.",
                        "is_direct_fallback": true,
                        "source_meta": {
                            "host": "alexisjanvier.net",
                            "source_type": "official_site",
                            "label": "Official site",
                            "trust_weight": 55,
                            "evidence_weight": 26,
                            "noise_penalty": 0,
                            "requires_exact_domain_match": true,
                            "supports_positive_verdicts": false,
                            "supports_negative_verdicts": false,
                            "freshness_ttl_days": 21
                        },
                        "entity": {
                            "score": 98,
                            "exactness": "exact_domain",
                            "reasons": [
                                "The result host matches the exact domain.",
                                "The exact domain is mentioned in the page snippet or document text.",
                                "The result URL contains the exact domain string.",
                                "The site name or brand appears in the document."
                            ]
                        },
                        "query": "direct-fallback",
                        "rank": 1
                    }
                ],
                "source_mix": {
                    "official_site": 1
                },
                "entity_coverage_score": 98,
                "high_trust_result_count": 0,
                "exact_match_result_count": 1,
                "high_entity_result_count": 1,
                "query_hit_count": 0,
                "query_count": 12,
                "used_failover_provider": false,
                "used_relaxed_queries": false,
                "search_passes": [
                    {
                        "name": "focused-primary",
                        "queries": 6,
                        "providers": [
                            "duckduckgo",
                            "bing"
                        ],
                        "results_added": 0,
                        "external_results_added": 0,
                        "deadline_hit": true
                    }
                ],
                "deadline_hit": true
            },
            "review_intelligence": {
                "documents_fetched": 1,
                "external_documents_fetched": 0,
                "documents": [
                    {
                        "provider": "direct-domain-fallback",
                        "url": "https://alexisjanvier.net/",
                        "host": "alexisjanvier.net",
                        "title": "Alexis Janvier",
                        "snippet": "First-party fallback captured directly from the domain when public search engines returned no usable results.",
                        "is_direct_fallback": true,
                        "source_meta": {
                            "host": "alexisjanvier.net",
                            "source_type": "official_site",
                            "label": "Official site",
                            "trust_weight": 55,
                            "evidence_weight": 26,
                            "noise_penalty": 0,
                            "requires_exact_domain_match": true,
                            "supports_positive_verdicts": false,
                            "supports_negative_verdicts": false,
                            "freshness_ttl_days": 21
                        },
                        "entity": {
                            "score": 98,
                            "exactness": "exact_domain",
                            "reasons": [
                                "The result host matches the exact domain.",
                                "The exact domain is mentioned in the page snippet or document text.",
                                "The result URL contains the exact domain string.",
                                "The site name or brand appears in the document."
                            ]
                        },
                        "query": "direct-fallback",
                        "rank": 1,
                        "body": "Alexis Janvier Aller directement au contenu Alexis Janvier Internet is not dead. It just smells funny. Combined Shape Combined Shape Accueil Blog Blogoliste Talks En ce moment À propos Mastodon – Codeberg – XMPP – RSS CC - alexisjanvier.net 2025 Dernier article Des logs pour la Saint-Valentin vendredi 14 février 2025 - 10 min de lecture - hebergement, logs, nginx Les logs sont essentiels pour surveiller le bon fonctionnement des systèmes et détecter les erreurs, ce qui en fait une compétence clé pour les développeurs et administrateurs. Cependant, ils peuvent aussi être perçus comme intrusifs, notamment sur les applications publiques, en raison du suivi qu’ils permettent. Bien gérer ses logs, c’est aussi une question de respect de la vie privée et un enjeu politique. Continuez à lire → Articles récents Just a paradox mardi 26 novembre 2024 - 7 min de lecture - outillage, golang, just, docker Internet n'est pas mort, il a juste une drôle d'odeur jeudi 3 octobre 2024 - 16 min de lecture - Talks récents Github est-il une FLOSS commune ? Talk donné le mercredi 30 octobre 2024 au CaenCamp. Soirée bidouille de réseaux informatiques Talk donné le jeudi 14 octobre 2021 au Festival Turfu. Mastodon – Codeberg – XMPP – RSS CC - alexisjanvier.net 2025",
                        "html": "<!DOCTYPE html> <html lang=\"fr\"> <head> <meta name=\"generator\" content=\"Hugo 0.136.5\"> <meta charset=\"utf-8\" /> <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" /> <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" /> <link rel=\"canonical\" href=\"https://alexisjanvier.net/\" /> <title>Alexis Janvier</title> <meta name=\"description\" content=\"Site d'Alexis Janvier, développeur.\" /> <link rel=\"apple-touch-icon\" sizes=\"180x180\" href=\"https://alexisjanvier.net/favicon/apple-touch-icon.png\"> <link rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"https://alexisjanvier.net/favicon/favicon-32x32.png\"> <link rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"https://alexisjanvier.net/favicon/favicon-16x16.png\"> <link rel=\"stylesheet\" href=\"/css/main.min.82cc08f23399f008b673657faf1c8d2f8492834f3ebc85b0599eb52b4a794c67.css\" integrity=\"sha256-gswI8jOZ8Ai2c2V/rxyNL4SSg08+vIWwWZ61K0p5TGc=\" /> <link rel=\"alternate\" type=\"application/rss+xml\" title=\"Alexis Janvier — Développeur\" href=\"https://alexisjanvier.net/rss.xml\" /> <meta property=\"og:url\" content=\"https://alexisjanvier.net/\"> <meta property=\"og:site_name\" content=\"Alexis Janvier\"> <meta property=\"og:title\" content=\"Accueil\"> <meta property=\"og:description\" content=\"Site d'Alexis Janvier, développeur.\"> <meta property=\"og:locale\" content=\"fr\"> <meta property=\"og:type\" content=\"website\"> <meta name=\"twitter:card\" content=\"summary\"> <meta name=\"twitter:title\" content=\"Accueil\"> <meta name=\"twitter:description\" content=\"Site d'Alexis Janvier, développeur.\"> <script type=\"application/ld+json\"> {\"description\":\"Internet is not dead it just smells funny..\",\"url\":\"https://alexisjanvier.net/\",\"@type\":\"WebSite\",\"headline\":\"Internet is not dead it just smells funny.\",\"name\":\"Alexis Janvier\",\"@context\":\"https://schema.org\"}</script> </head> <body> <div class=\"row\"> <div class=\"skipnav\" role=\"navigation\" aria-label=\"Secondary\"> <a href=\"#maincontent\">Aller directement au contenu</a> </div> <div class=\"col-xs-12 col-md-3 no-margin\"> <header class=\"site-header\" role=\"banner\"> <div class=\"wrapper fixed\"> <img src=\"/images/alexisjanvier-small.jpg\" title=\"Photo de profil d'Alexis Janvier\" alt=\"Photo de profil d'Alexis Janvier\" width=\"100\" height=\"100\" class=\"hide-mobile logo\"> <a class=\"site-title\" href=\"/\">Alexis Janvier</a> <p class=\"hide-mobile about-paragraph\"> <a href=\"/blog/internet-n-est-pas-mort-il-a-juste-une-drole-d-odeur/\"> Internet is not dead. It just smells funny. </a> </p> <div class=\"menu-icon hide-desktop\" id=\"burger-open\"> <svg width=\"24\" height=\"16\" viewBox=\"0 0 24 16\" xmlns=\"http://www.w3.org/2000/svg\"> <title>Combined Shape</title> <path d=\"M0 0h24v2H0V0zm0 7h24v2H0V7zm0 7h24v2H0v-2z\" fill=\"#2F2F2F\" fill-rule=\"evenodd\" /> </svg> </div> <nav id=\"nav\" class=\"site-nav hide-mobile\"> <div id=\"menu\" class=\"hide\"> <div class=\"menu hide2\"> <span class=\"close-icon hide-desktop\" id=\"burger-close\"> <svg width=\"23\" height=\"22\" viewBox=\"0 0 23 22\" xmlns=\"http://www.w3.org/2000/svg\"> <title>Combined Shape</title> <path d=\"M11.5 9.586L1.954.04.54 1.454 10.086 11 .54 20.546l1.414 1.414 9.546-9.546 9.546 9.546 1.414-1.414L12.914 11l9.546-9.546L21.046.04 11.5 9.586z\" fill=\"#FFF\" fill-rule=\"evenodd\" /> </svg> </span> <div class=\"menu-list\"> <a href=\"/\" aria-current=\"page\" class=\"active\" >Accueil</a> <a href=\"/blog\" >Blog</a> <a href=\"/blogroll\" >Blogoliste</a> <a href=\"/talks\" >Talks</a> <a href=\"/now\" >En ce moment</a> <a href=\"/a-propos\" >À propos</a> </div> </div> </div> </nav> </div> </header> <div class=\"hide-mobile\"> <div class=\"hidden msg\"> <div class=\"curtain fullScreen\"> <div class=\"table fullScreen\"> <div class=\"msgContainer fullScreen\"> <div class=\"msgContent\"> </div> </div> </div> </div> </div> <footer class=\"site-footer\" aria-label=\"Footer desktop\"> <a rel=\"me\" href=\"https://mamot.fr/@alexisjanvier\">Mastodon</a> – <a href=\"https://codeberg.org/alexisjanvier\">Codeberg</a> – <a href=\"xmpp:alexis@clavardage.lesjanvier.com\">XMPP</a> – <a rel=\"alternate\" type=\"application/rss+xml\" href=\"/rss.xml\">RSS</a> <p><a href=\"https://creativecommons.org/licenses/by-nc-sa/4.0/\"><abbr title=\"Attribution-NonCommercial-ShareAlike 4.0 International \">CC</abbr></a> - alexisjanvier.net 2025</p> </footer> </div> </div> <div class=\"col-xs-12 col-md-9 no-margin\"> <main class=\"page-content\" id=\"maincontent\"> <div class=\"wrapper\"> <div class=\"home\"> <article class=\"post\"> <h1 class=\"section-title\">Dernier article</h1> <header class=\"post-header\"> <h1 class=\"post-title newest-post\" itemprop=\"name headline\">Des logs pour la Saint-Valentin </h1> <p class=\"post-meta\"> <time datetime=\"2025-02-14 11:47:44 +0100 CET\" itemprop=\"datePublished\"> vendredi 14 février 2025 </time>- 10 min de lecture - <a class=\"tag_list_link\" href=\"/tags/hebergement\">hebergement</a>, <a class=\"tag_list_link\" href=\"/tags/logs\">logs</a>, <a class=\"tag_list_link\" href=\"/tags/nginx\">nginx</a> </p> </header> <p class=\"attention-grabber\">Les logs sont essentiels pour surveiller le bon fonctionnement des systèmes et détecter les erreurs, ce qui en fait une compétence clé pour les développeurs et administrateurs. Cependant, ils peuvent aussi être perçus comme intrusifs, notamment sur les applications publiques, e…",
                        "status_code": 200,
                        "final_url": "https://alexisjanvier.net/"
                    }
                ],
                "facts": [],
                "ignored_candidates": [],
                "blocked_candidates": 0,
                "source_diversity": 0,
                "host_coverage": 1,
                "source_type_coverage": 1,
                "exact_match_documents": 1,
                "external_exact_match_documents": 0,
                "elapsed_ms": 64,
                "candidates_considered": 1,
                "fetch_success_rate": 100,
                "avg_source_trust": 55,
                "avg_entity_score": 98
            },
            "evidence": {
                "scores": {
                    "legit": 0,
                    "safe": 0,
                    "trusted": 0,
                    "caution": 0,
                    "scam": 0,
                    "dangerous": 0,
                    "spam": 0,
                    "nsfw": 0
                },
                "counts": {
                    "official_presence": 0,
                    "business_profiles": 0,
                    "positive_reviews": 0,
                    "negative_reviews": 0,
                    "scam_reports": 0,
                    "dangerous_reports": 0,
                    "spam_reports": 0,
                    "adult_reports": 0
                },
                "tag_support": [],
                "top_supporting_facts": [],
                "top_positive_facts": []
            },
            "quality": {
                "source_diversity_score": 0,
                "entity_coverage_score": 98,
                "freshness_score": 18,
                "confidence": 23,
                "documents_fetched": 1,
                "external_documents_fetched": 0,
                "fact_count": 0,
                "avg_source_trust": 55,
                "avg_entity_score": 98,
                "fetch_success_rate": 100,
                "exact_match_score": 0,
                "query_coverage_score": 100,
                "host_coverage_score": 20,
                "source_type_coverage_score": 25,
                "qualified_evidence_score": 0,
                "exact_match_documents": 0,
                "blocked_candidates": 0,
                "used_direct_fallback": true,
                "external_results_found": 0
            },
            "decision": {
                "state": "insufficient",
                "uncertainty": true,
                "candidate_support": 0,
                "candidate_contradiction": 0,
                "supports": {
                    "dangerous": false,
                    "scam": false,
                    "spam": false,
                    "nsfw": false,
                    "trusted": false
                },
                "evidence_quality": "low",
                "state_label": "Inconclusive",
                "state_reason": "Public search did not yield usable third-party matches, so the system fell back to first-party inspection only."
            },
            "signals": {
                "scores": {
                    "legit": 0,
                    "safe": 0,
                    "trusted": 0,
                    "caution": 0,
                    "scam": 0,
                    "dangerous": 0,
                    "spam": 0,
                    "nsfw": 0
                },
                "counts": {
                    "official_presence": 0,
                    "business_profiles": 0,
                    "positive_reviews": 0,
                    "negative_reviews": 0,
                    "scam_reports": 0,
                    "dangerous_reports": 0,
                    "spam_reports": 0,
                    "adult_reports": 0
                },
                "candidate_support": 0,
                "candidate_contradiction": 0,
                "highlights": [
                    "External evidence remained inconclusive because diversity, exact matching, or confidence was still too weak."
                ]
            },
            "citations": [],
            "debug": {
                "top_supporting_facts": [],
                "top_positive_facts": [],
                "ignored_candidates": [],
                "budget_ms": 3000,
                "search_budget_ms": 3000,
                "review_budget_ms": 1500,
                "search_mode": "interactive-refresh",
                "query_cap": 12,
                "provider_cap": 2,
                "reason": "interactive-refresh",
                "priority": 75
            },
            "last_good": {
                "checked_at": "2026-03-19T00:46:17+00:00",
                "summary": "External checks ran, but the verified result set was still too sparse to harden the verdict.",
                "decision": {
                    "state": "insufficient",
                    "uncertainty": true,
                    "candidate_support": 0,
                    "candidate_contradiction": 0,
                    "supports": {
                        "dangerous": false,
                        "scam": false,
                        "spam": false,
                        "nsfw": false,
                        "trusted": false
                    },
                    "evidence_quality": "low",
                    "state_label": "Inconclusive",
                    "state_reason": "Public search did not yield usable third-party matches, so the system fell back to first-party inspection only."
                },
                "signals": {
                    "scores": {
                        "legit": 0,
                        "safe": 0,
                        "trusted": 0,
                        "caution": 0,
                        "scam": 0,
                        "dangerous": 0,
                        "spam": 0,
                        "nsfw": 0
                    },
                    "counts": {
                        "official_presence": 0,
                        "business_profiles": 0,
                        "positive_reviews": 0,
                        "negative_reviews": 0,
                        "scam_reports": 0,
                        "dangerous_reports": 0,
                        "spam_reports": 0,
                        "adult_reports": 0
                    },
                    "candidate_support": 0,
                    "candidate_contradiction": 0,
                    "highlights": [
                        "External evidence remained inconclusive because diversity, exact matching, or confidence was still too weak."
                    ]
                },
                "citations": []
            }
        },
        "external_decision": {
            "state": "insufficient",
            "uncertainty": true,
            "candidate_support": 0,
            "candidate_contradiction": 0,
            "supports": {
                "dangerous": false,
                "scam": false,
                "spam": false,
                "nsfw": false,
                "trusted": false
            },
            "evidence_quality": "low",
            "state_label": "Inconclusive",
            "state_reason": "Public search did not yield usable third-party matches, so the system fell back to first-party inspection only."
        },
        "signal_scores": [
            {
                "label": "Strongest tag heuristic",
                "value": "T · 86%",
                "tone": "good",
                "detail": "The highest raw tag match from the heuristic engine before visibility thresholds and manual overrides."
            },
            {
                "label": "Trust score",
                "value": "81/100",
                "tone": "good",
                "detail": "Confidence derived from authority, crawl quality, stability, and risk signals."
            },
            {
                "label": "Authority score",
                "value": "51/100",
                "tone": "caution",
                "detail": "A higher authority score usually means broader reputation and backlink confidence."
            },
            {
                "label": "Spam risk",
                "value": "0/100",
                "tone": "good",
                "detail": "Lower is better. This blends spam indicators with false-positive protections for legitimate sites."
            },
            {
                "label": "Quality score",
                "value": "96/100",
                "tone": "good",
                "detail": "Based on crawl quality, content completeness, and technical evidence."
            },
            {
                "label": "Safety score",
                "value": "100/100",
                "tone": "good",
                "detail": "Higher is safer. Direct fraud signals can heavily cap this even when SEO signals look strong."
            },
            {
                "label": "Fraud score",
                "value": "0/100",
                "tone": "good",
                "detail": "Lower is better. This reflects phishing, drainer, fake-support, fake-shop, and malware signals."
            },
            {
                "label": "Infrastructure risk",
                "value": "0/100",
                "tone": "good",
                "detail": "Lower is better. This reflects the IP, registrar, and nameserver neighbourhood seen by the crawler."
            },
            {
                "label": "Evidence confidence",
                "value": "100/100",
                "tone": "good",
                "detail": "Higher means the crawler had enough pages and registry evidence to make a stronger call."
            },
            {
                "label": "External evidence",
                "value": "Low",
                "tone": "unknown",
                "detail": "Quality of the structured search and review evidence cluster."
            },
            {
                "label": "External decision",
                "value": "Inconclusive",
                "tone": "unknown",
                "detail": "How third-party evidence compares with the current candidate tag."
            },
            {
                "label": "NSFW score",
                "value": "0/100",
                "tone": "good",
                "detail": "Context-aware adult-content detection with medical / educational false-positive reduction."
            },
            {
                "label": "Registry stability",
                "value": "100/100",
                "tone": "good",
                "detail": "Based on age, expiry runway, and the amount of ownership / registrar churn."
            }
        ],
        "signal_sections": [
            {
                "title": "Registry & ownership",
                "items": [
                    {
                        "label": "Domain age",
                        "value": "20.9 years",
                        "tone": "good",
                        "detail": "Older domains generally carry more historical trust than very new ones."
                    },
                    {
                        "label": "Stability score",
                        "value": "100/100",
                        "tone": "good",
                        "detail": "Penalised by registrar, ownership, and nameserver churn."
                    },
                    {
                        "label": "Days to expiry",
                        "value": "390",
                        "tone": "good",
                        "detail": "Very short renewal windows can be a weak trust signal."
                    },
                    {
                        "label": "Registrar / ownership changes",
                        "value": "0 / 0",
                        "tone": "good",
                        "detail": "Frequent ownership churn can weaken trust."
                    },
                    {
                        "label": "Nameserver changes",
                        "value": "0",
                        "tone": "good",
                        "detail": "Repeated infrastructure changes can indicate instability."
                    },
                    {
                        "label": "DNSSEC / privacy",
                        "value": "DNSSEC off · privacy off",
                        "tone": "caution",
                        "detail": "DNSSEC strengthens DNS trust; privacy is neutral on its own."
                    }
                ]
            },
            {
                "title": "Reputation & search evidence",
                "items": [
                    {
                        "label": "Backlinks",
                        "value": "1",
                        "tone": "unknown",
                        "detail": "Broader backlink evidence usually improves confidence."
                    },
                    {
                        "label": "Referring domains",
                        "value": "1",
                        "tone": "unknown",
                        "detail": "Unique linking domains are more useful than raw link volume."
                    },
                    {
                        "label": "Organic keywords",
                        "value": "88",
                        "tone": "caution",
                        "detail": "Search footprint helps distinguish real sites from thin shells."
                    },
                    {
                        "label": "Indexed pages",
                        "value": "123",
                        "tone": "good",
                        "detail": "Larger index coverage usually means more evidence to classify from."
                    },
                    {
                        "label": "Brand strength",
                        "value": "74/100",
                        "tone": "good",
                        "detail": "Stronger brand signals reduce false positives for legitimate sites."
                    },
                    {
                        "label": "Risk label",
                        "value": "GOOD",
                        "tone": "unknown",
                        "detail": "This is the raw crawl / heuristic risk label feeding the tag model."
                    }
                ]
            },
            {
                "title": "Crawl, content & technicals",
                "items": [
                    {
                        "label": "HTTP status",
                        "value": "200",
                        "tone": "good",
                        "detail": "Healthy responses make classification more reliable."
                    },
                    {
                        "label": "HTTPS / speed",
                        "value": "HTTPS OK · 84 ms",
                        "tone": "good",
                        "detail": "Slow or broken technical signals weaken confidence."
                    },
                    {
                        "label": "Content words",
                        "value": "226",
                        "tone": "caution",
                        "detail": "Thin pages are harder to trust and easier to manipulate."
                    },
                    {
                        "label": "Schema / structure",
                        "value": "1 schema · meta · H1",
                        "tone": "caution",
                        "detail": "Structured markup and basic on-page hygiene improve quality confidence."
                    },
                    {
                        "label": "Links on page",
                        "value": "19 internal · 3 external",
                        "tone": "good",
                        "detail": "Link patterns help detect thin directories and promo pages."
                    },
                    {
                        "label": "Page speed / mobile",
                        "value": "100/100 · 93/100",
                        "tone": "good",
                        "detail": "Better technical quality generally reduces low-effort site patterns."
                    },
                    {
                        "label": "Crawl access",
                        "value": "Open",
                        "tone": "good",
                        "detail": "The crawler reached the site without an anti-bot challenge."
                    }
                ]
            },
            {
                "title": "External evidence & explainability",
                "items": [
                    {
                        "label": "Decision state",
                        "value": "Inconclusive",
                        "tone": "unknown",
                        "detail": "Public search did not yield usable third-party matches, so the system fell back to first-party inspection only."
                    },
                    {
                        "label": "Evidence quality",
                        "value": "Low",
                        "tone": "unknown",
                        "detail": "Blends source trust, domain matching, evidence diversity, and freshness."
                    },
                    {
                        "label": "Support vs contradiction",
                        "value": "0 / 0",
                        "tone": "unknown",
                        "detail": "Compares how much structured external evidence supports the candidate tag against evidence that contradicts it."
                    },
                    {
                        "label": "Qualified risk sources",
                        "value": "No",
                        "tone": "good",
                        "detail": "Risk tags only promote from external evidence when source diversity or source trust thresholds are met."
                    },
                    {
                        "label": "Uncertainty buffer",
                        "value": "Active",
                        "tone": "caution",
                        "detail": "Prevents thin or mixed external evidence from forcing a stronger tag than the evidence can justify."
                    }
                ]
            }
        ],
        "positives": [
            "Established domain age: 20.9 years.",
            "Low registrar / ownership churn with solid registry stability.",
            "Healthy crawl quality and on-page completeness.",
            "Search evidence is broad enough to classify with better confidence."
        ],
        "risks": [
            "External evidence was mixed or sparse, so the tag model keeps an uncertainty buffer instead of overcommitting."
        ]
    },
    "traffic_confidence": 77,
    "whois": {
        "current": {
            "id": 26603,
            "domain": "alexisjanvier.net",
            "source_type": "rdap",
            "rdap_url": "https://rdap.verisign.com/net/v1/domain/ALEXISJANVIER.NET",
            "registrar_name": "Scaleway SAS",
            "registrar_handle": "74",
            "registrant_name": "",
            "registrant_org": "",
            "registrant_country": "",
            "registrant_email": "",
            "abuse_email": "abuse+ndd@scaleway.com",
            "created_date": "2005-05-12 11:56:37",
            "updated_date": "2026-03-13 12:04:21",
            "expires_date": "2027-05-12 11:56:37",
            "nameservers_json": "[\"ns0.dom.scw.cloud\",\"ns1.dom.scw.cloud\"]",
            "status_json": "[\"client transfer prohibited\"]",
            "dnssec": "unsigned",
            "privacy_protected": 0,
            "content_hash": "baa55753318114f22c9e4accd69723f95cac9e53593b4f4c2dfaf571c8b1346c",
            "history_count": 1,
            "last_checked_at": "2026-03-19 00:46:06",
            "last_changed_at": "2026-03-19 00:46:06",
            "created_at": "2026-03-19 00:46:06",
            "updated_at": "2026-03-19 00:46:06"
        },
        "history": [
            {
                "id": 27211,
                "domain": "alexisjanvier.net",
                "source_type": "rdap",
                "registrar_name": "Scaleway SAS",
                "registrar_handle": "74",
                "registrant_name": "",
                "registrant_org": "",
                "registrant_country": "",
                "registrant_email": "",
                "abuse_email": "abuse+ndd@scaleway.com",
                "created_date": "2005-05-12 11:56:37",
                "updated_date": "2026-03-13 12:04:21",
                "expires_date": "2027-05-12 11:56:37",
                "nameservers_json": "[\"ns0.dom.scw.cloud\",\"ns1.dom.scw.cloud\"]",
                "status_json": "[\"client transfer prohibited\"]",
                "dnssec": "unsigned",
                "privacy_protected": 0,
                "content_hash": "baa55753318114f22c9e4accd69723f95cac9e53593b4f4c2dfaf571c8b1346c",
                "checked_at": "2026-03-19 00:46:06",
                "change_summary": "Initial WHOIS snapshot captured.",
                "created_at": "2026-03-19 00:46:06"
            }
        ],
        "signals": {
            "age_years": 20.9,
            "days_to_expiry": 390,
            "days_since_last_registry_update": 34,
            "stability_score": 100,
            "registrar_changes": 0,
            "ownership_changes": 0,
            "nameserver_changes": 0,
            "status_changes": 0,
            "history_entries": 1,
            "privacy_protected": false,
            "dnssec_enabled": false,
            "has_registrant_country": false,
            "registrant_country": "",
            "nameserver_count": 2,
            "status_count": 1
        }
    },
    "discovered_domain": {
        "id": 136115,
        "domain": "alexisjanvier.net",
        "first_seen_at": "2026-03-16 03:49:21",
        "last_crawled_at": "2026-03-29 00:52:25",
        "last_title": "Alexis Janvier",
        "last_http_status": 200,
        "discovered_from_domain": "uses.tech",
        "depth": 0,
        "backlinks_count": 1,
        "rating_cache": 56,
        "spam_score": 0,
        "risk_label": "good",
        "category_name": "Personal: Portfolios & CVs",
        "primary_country_code": "",
        "internal_links_count": 19,
        "external_links_count": 3,
        "social_profiles_count": 0,
        "content_word_count": 226,
        "title_quality_score": 79,
        "has_meta_description": 1,
        "has_h1": 1,
        "language_code": "fr",
        "response_time_ms": 84,
        "robots_status": 200,
        "sitemap_status": 200,
        "sitemap_total_urls": 123,
        "quality_score": 96,
        "site_name": "Alexis Janvier",
        "canonical_domain": "",
        "favicon_present": 1,
        "schema_org_count": 1,
        "noindex_detected": 0,
        "feed_links_count": 1,
        "https_working": 1,
        "estimated_authority_score": 40,
        "trust_score": 95,
        "nsfw_score": 0,
        "overall_rank_estimate": 2193230,
        "primary_tag": "T",
        "tag_codes": "T",
        "manual_verified_status": "",
        "manual_tag_codes": "",
        "manual_rating_delta": 0,
        "manual_authority_delta": 0,
        "manual_trust_delta": 0,
        "manual_note": null,
        "manual_adjusted_by": null,
        "manual_adjusted_at": null,
        "manual_lock_scores": 0,
        "manual_lock_flags": 0,
        "crawl_blocked": 0,
        "crawl_blocked_by": "",
        "crawl_blocked_reason": null,
        "safety_score": 100,
        "fraud_score": 0,
        "legitimacy_score": 59,
        "infrastructure_risk_score": 0,
        "score_confidence": 98,
        "tag_confidence": 72,
        "category_confidence": 84,
        "deep_crawl_pages": 50,
        "resolved_ip": "62.210.125.190",
        "category_candidates_json": "[{\"category\":\"Personal: Portfolios & CVs\",\"score\":72},{\"category\":\"Business: Corporate & Professional Services\",\"score\":22},{\"category\":\"News & Media\",\"score\":17},{\"category\":\"Sports\",\"score\":17}]",
        "page_signals_json": "[{\"path\":\"/blog/internet-n-est-pas-mort-il-a-juste-une-drole-d-odeur/\",\"status\":200,\"title\":\"Internet n'est pas mort, il a juste une drôle d'odeur | Alexis Janvier\",\"word_count\":3547,\"summary_text\":\"Internet n'est pas mort, il a juste une drôle d'odeur | Alexis Janvier Internet n&#39;est pas mort, il a juste une drôle d&#39;odeur | Alexis Janvier { \\\"mainEntityOfPage\\\": { \\\"@type\\\": \\\"WebPage\\\", \\\"@id\\\": \\\"https:\\\\/\\\\/alexisjanvier.net\\\\/blog\\\\/internet-n-est-pas-mort-il-a-juste-une-drole-d-odeur\\\\/\\\" }, \\\"description\\\": \\\"Lorsque j\\\\u0027ai mis en ligne ce blog il y a quelques années, j\\\\u0027ai longuement cherché à détourner des répliques de The Big Lebowski comme accroche. Ne trouvant rien de concluant, je me suis finalement tourné vers une valeur sûre : Frank Zappa.\\\", \\\"url\\\": \\\"https:\\\\/\\\\/alexisjanvier.net\\\\/blog\\\\/internet-n-est-pas-mort-il-a-juste-une-drole-d-odeur\\\\/\\\", \\\"@type\\\": \\\"BlogPosting\\\", \\\"headline\\\": \\\"Internet n\\\\u0027est pas mort, il a juste une drôle d\\\\u0027odeur\\\", \\\"dateModified\\\": \\\"2024-10-03 09:31:50 \\\\u002b0000 UTC\\\", \\\"datePublished\\\": \\\"2024-10-03 09:31:50 \\\\u002b0000 U\",\"classification_terms\":[\"blog/internet-n-est-pas-mort-il-a-juste-une-drole-d-odeur\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":3,\"depth\":1},{\"path\":\"/blog\",\"status\":200,\"title\":\"Blog | Alexis Janvier\",\"word_count\":3144,\"summary_text\":\"Blog | Alexis Janvier Blog | Alexis Janvier Aller directement au contenu Alexis Janvier Internet is not dead. It just smells funny. Combined Shape Combined Shape Accueil Blog Blogoliste Talks En ce moment À propos Mastodon &ndash; Codeberg &ndash; XMPP &ndash; RSS CC - alexisjanvier.net 2025 Blog 2025 Des logs pour la Saint-Valentin vendredi 14 février 2025 - 10 min de lecture - hebergement, logs, nginx Les logs sont essentiels pour surveiller le bon fonctionnement des systèmes et détecter les erreurs, ce qui en fait une compétence clé pour les développeurs et administrateurs. Cependant, ils peuvent aussi être perçus comme intrusifs, notamment sur les applications publiques, en raison du suivi qu’ils permettent. Bien gérer ses logs, c’est aussi une question de respect de la vie privée et un enjeu politique. 202\",\"classification_terms\":[\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":12,\"depth\":1},{\"path\":\"/blogroll\",\"status\":200,\"title\":\"Blogoliste | Alexis Janvier\",\"word_count\":1133,\"summary_text\":\"Blogoliste | Alexis Janvier Blogoliste | Alexis Janvier Aller directement au contenu Alexis Janvier Internet is not dead. It just smells funny. Combined Shape Combined Shape Accueil Blog Blogoliste Talks En ce moment À propos Mastodon &ndash; Codeberg &ndash; XMPP &ndash; RSS CC - alexisjanvier.net 2025 Blogoliste Le HTTP, c'est le « protocole de transfert hypertexte ». Un hypertexte est un document informatiques qui permet de passer d'une information à l'autre grâce à des liens hypertextes. Cette page est mon petit bout de maillage de la toile. Veille professionnelle Des sites me permettant d'être professionnellement à jour. W3C News Le W3C est en charge de promouvoir la compatibilité des technologies du web. Forcement, ce n&#39;est pas idiot de les suivre. (en) RSS Mastodon MDN Blog Ma source de référence pour tout\",\"classification_terms\":[\"blogroll\",\"news\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/talks\",\"status\":200,\"title\":\"Talks | Alexis Janvier\",\"word_count\":311,\"summary_text\":\"Talks | Alexis Janvier Talks | Alexis Janvier Aller directement au contenu Alexis Janvier Internet is not dead. It just smells funny. Combined Shape Combined Shape Accueil Blog Blogoliste Talks En ce moment À propos Mastodon &ndash; Codeberg &ndash; XMPP &ndash; RSS CC - alexisjanvier.net 2025 Talks Github est-il une FLOSS commune ? Talk donné le mercredi 30 octobre 2024 au CaenCamp. Soirée bidouille de réseaux informatiques Talk donné le jeudi 14 octobre 2021 au Festival Turfu. Migrer de Gatsby à Next.js Talk donné le mardi 21 septembre 2021 au CaenCamp. OpenAPI: un contrat pour vos API.s Talk donné le vendredi 26 février 2021 au CaenCamp. Télétravail, la nouvelle norme ? Talk donné le dimanche 21 juin 2020 au France Ô - flashtalk. Maintenir un projet open-source au sein de sa boite : l’exemple de react-admin T\",\"classification_terms\":[\"talks\",\"api\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/now\",\"status\":200,\"title\":\"En ce moment | Alexis Janvier\",\"word_count\":511,\"summary_text\":\"En ce moment | Alexis Janvier En ce moment | Alexis Janvier Aller directement au contenu Alexis Janvier Internet is not dead. It just smells funny. Combined Shape Combined Shape Accueil Blog Blogoliste Talks En ce moment À propos Mastodon &ndash; Codeberg &ndash; XMPP &ndash; RSS CC - alexisjanvier.net 2025 En ce moment À l&#39;attention du visiteur qui arriverait sur cette page et que je ne connaitrais pas ou que je n&#39;aurais pas vu depuis longtemps. Voilà ce qui m&#39;occupe en ce moment. Sur une idée de Derek Sivers, découverte sur Le carnet de Joachim. Mise à jour : novembre 2024 Je m&rsquo;aperçois qu&rsquo;en arrivant sur ce blog, on pourrait avoir l&rsquo;impression que je suis un peu au fond du trou : &ldquo;Internet n&rsquo;est pas mort, il a juste une drôle d&rsquo;odeur&rdquo;, &ldquo;Github est-il une FL\",\"classification_terms\":[\"now\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/a-propos\",\"status\":200,\"title\":\"À propos | Alexis Janvier\",\"word_count\":459,\"summary_text\":\"À propos | Alexis Janvier À propos | Alexis Janvier { \\\"@context\\\": \\\"https://schema.org\\\", \\\"@type\\\": \\\"Person\\\", \\\"address\\\": { \\\"@type\\\": \\\"PostalAddress\\\", \\\"addressLocality\\\": \\\"Caen\\\", \\\"postalCode\\\": \\\"14000\\\", \\\"addressCountry\\\": \\\"FR\\\" }, \\\"image\\\": \\\"https://secure.gravatar.com/avatar/4ca5068a7c55a229d9546da2f51e2f53\\\", \\\"jobTitle\\\": \\\"Consultant et Développeur en systèmes d’information\\\", \\\"name\\\": \\\"Alexis Janvier\\\", \\\"url\\\": \\\"https://alexisjanvier.net/a-propos\\\", \\\"affiliation\\\": { \\\"@type\\\": \\\"Organization\\\", \\\"name\\\": \\\"CaenCamp\\\", \\\"url\\\": \\\"https://caen.camp\\\" }, \\\"worksFor\\\": { \\\"@type\\\": \\\"Organization\\\", \\\"name\\\": \\\"Incaya\\\", \\\"url\\\": \\\"https://www.incaya.fr/\\\" } } Aller directement au contenu Alexis Janvier Internet is not dead. It just smells funny. Combined Shape Combined Shape Accueil Blog Blogoliste Talks En ce moment À propos Mastodon &ndash; Codeberg &ndas\",\"classification_terms\":[\"a-propos\",\"address\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/tags/hebergement\",\"status\":200,\"title\":\"Hebergement | Alexis Janvier\",\"word_count\":191,\"summary_text\":\"Hebergement | Alexis Janvier Hebergement | Alexis Janvier Aller directement au contenu Alexis Janvier Internet is not dead. It just smells funny. Combined Shape Combined Shape Accueil Blog Blogoliste Talks En ce moment À propos Mastodon &ndash; Codeberg &ndash; XMPP &ndash; RSS CC - alexisjanvier.net 2025 Contenus associés au tag Hebergement 2025 Des logs pour la Saint-Valentin vendredi 14 février 2025 - 10 min de lecture - hebergement, logs, nginx Les logs sont essentiels pour surveiller le bon fonctionnement des systèmes et détecter les erreurs, ce qui en fait une compétence clé pour les développeurs et administrateurs. Cependant, ils peuvent aussi être perçus comme intrusifs, notamment sur les applications publiques, en raison du suivi qu’ils permettent. Bien gérer ses logs, c’est aussi une question de respect de l\",\"classification_terms\":[\"tags/hebergement\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":1,\"depth\":1},{\"path\":\"/tags/logs\",\"status\":200,\"title\":\"Logs | Alexis Janvier\",\"word_count\":141,\"summary_text\":\"Logs | Alexis Janvier Logs | Alexis Janvier Aller directement au contenu Alexis Janvier Internet is not dead. It just smells funny. Combined Shape Combined Shape Accueil Blog Blogoliste Talks En ce moment À propos Mastodon &ndash; Codeberg &ndash; XMPP &ndash; RSS CC - alexisjanvier.net 2025 Contenus associés au tag Logs 2025 Des logs pour la Saint-Valentin vendredi 14 février 2025 - 10 min de lecture - hebergement, logs, nginx Les logs sont essentiels pour surveiller le bon fonctionnement des systèmes et détecter les erreurs, ce qui en fait une compétence clé pour les développeurs et administrateurs. Cependant, ils peuvent aussi être perçus comme intrusifs, notamment sur les applications publiques, en raison du suivi qu’ils permettent. Bien gérer ses logs, c’est aussi une question de respect de la vie privée e\",\"classification_terms\":[\"tags/logs\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":1,\"depth\":1},{\"path\":\"/tags/nginx\",\"status\":200,\"title\":\"Nginx | Alexis Janvier\",\"word_count\":141,\"summary_text\":\"Nginx | Alexis Janvier Nginx | Alexis Janvier Aller directement au contenu Alexis Janvier Internet is not dead. It just smells funny. Combined Shape Combined Shape Accueil Blog Blogoliste Talks En ce moment À propos Mastodon &ndash; Codeberg &ndash; XMPP &ndash; RSS CC - alexisjanvier.net 2025 Contenus associés au tag Nginx 2025 Des logs pour la Saint-Valentin vendredi 14 février 2025 - 10 min de lecture - hebergement, logs, nginx Les logs sont essentiels pour surveiller le bon fonctionnement des systèmes et détecter les erreurs, ce qui en fait une compétence clé pour les développeurs et administrateurs. Cependant, ils peuvent aussi être perçus comme intrusifs, notamment sur les applications publiques, en raison du suivi qu’ils permettent. Bien gérer ses logs, c’est aussi une question de respect de la vie privée\",\"classification_terms\":[\"tags/nginx\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":1,\"depth\":1},{\"path\":\"/blog/des-logs-pour-la-saint-valentin/\",\"status\":200,\"title\":\"Des logs pour la Saint-Valentin | Alexis Janvier\",\"word_count\":2283,\"summary_text\":\"Des logs pour la Saint-Valentin | Alexis Janvier Des logs pour la Saint-Valentin | Alexis Janvier { \\\"mainEntityOfPage\\\": { \\\"@type\\\": \\\"WebPage\\\", \\\"@id\\\": \\\"https:\\\\/\\\\/alexisjanvier.net\\\\/blog\\\\/des-logs-pour-la-saint-valentin\\\\/\\\" }, \\\"description\\\": \\\"Les logs sont essentiels pour surveiller le bon fonctionnement des systèmes et détecter les erreurs, ce qui en fait une compétence clé pour les développeurs et administrateurs. Cependant, ils peuvent aussi être perçus comme intrusifs, notamment sur les applications publiques, en raison du suivi qu’ils permettent. Bien gérer ses logs, c’est aussi une question de respect de la vie privée et un enjeu politique.\\\", \\\"url\\\": \\\"https:\\\\/\\\\/alexisjanvier.net\\\\/blog\\\\/des-logs-pour-la-saint-valentin\\\\/\\\", \\\"@type\\\": \\\"BlogPosting\\\", \\\"headline\\\": \\\"Des logs pour la Saint-Valentin\\\", \\\"dateModified\\\": \\\"2025-02-14 10:47:44 \\\\u002b000\",\"classification_terms\":[\"blog/des-logs-pour-la-saint-valentin\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":4,\"depth\":1},{\"path\":\"/blog/just-a-paradox/\",\"status\":200,\"title\":\"Just a paradox | Alexis Janvier\",\"word_count\":1534,\"summary_text\":\"Just a paradox | Alexis Janvier Just a paradox | Alexis Janvier { \\\"mainEntityOfPage\\\": { \\\"@type\\\": \\\"WebPage\\\", \\\"@id\\\": \\\"https:\\\\/\\\\/alexisjanvier.net\\\\/blog\\\\/just-a-paradox\\\\/\\\" }, \\\"description\\\": \\\"Comment, en refusant de céder aux solutions simplifiées des outils dédiés à l’expérience développeur·euse, on peut finir par investir du temps à améliorer cette même expérience.\\\", \\\"url\\\": \\\"https:\\\\/\\\\/alexisjanvier.net\\\\/blog\\\\/just-a-paradox\\\\/\\\", \\\"@type\\\": \\\"BlogPosting\\\", \\\"headline\\\": \\\"Just a paradox\\\", \\\"dateModified\\\": \\\"2024-11-26 10:47:44 \\\\u002b0000 UTC\\\", \\\"datePublished\\\": \\\"2024-11-26 10:47:44 \\\\u002b0000 UTC\\\", \\\"author\\\": { \\\"@type\\\": \\\"Person\\\", \\\"name\\\": \\\"Alexis Janvier\\\" }, \\\"@context\\\": \\\"https://schema.org\\\" } Aller directement au contenu Alexis Janvier Internet is not dead. It just smells funny. Combined Shape Combined Shape Accueil Blog Blogoliste Tal\",\"classification_terms\":[\"blog/just-a-paradox\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":1},{\"path\":\"/tags/outillage\",\"status\":200,\"title\":\"Outillage | Alexis Janvier\",\"word_count\":1565,\"summary_text\":\"Outillage | Alexis Janvier Outillage | Alexis Janvier Aller directement au contenu Alexis Janvier Internet is not dead. It just smells funny. Combined Shape Combined Shape Accueil Blog Blogoliste Talks En ce moment À propos Mastodon &ndash; Codeberg &ndash; XMPP &ndash; RSS CC - alexisjanvier.net 2025 Contenus associés au tag Outillage 2024 Just a paradox mardi 26 novembre 2024 - 7 min de lecture - outillage, golang, just, docker Comment, en refusant de céder aux solutions simplifiées des outils dédiés à l’expérience développeur·euse, on peut finir par investir du temps à améliorer cette même expérience. Migrer une application React de CRA à Vite mardi 4 juin 2024 - 5 min de lecture - javascript, outillage, react Rapide retour d&#39;expérience sur la migration d&#39;une application React gérée avec l&#39;outillage C\",\"classification_terms\":[\"tags/outillage\",\"api\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":1},{\"path\":\"/tags/golang\",\"status\":200,\"title\":\"Golang | Alexis Janvier\",\"word_count\":102,\"summary_text\":\"Golang | Alexis Janvier Golang | Alexis Janvier Aller directement au contenu Alexis Janvier Internet is not dead. It just smells funny. Combined Shape Combined Shape Accueil Blog Blogoliste Talks En ce moment À propos Mastodon &ndash; Codeberg &ndash; XMPP &ndash; RSS CC - alexisjanvier.net 2025 Contenus associés au tag Golang 2024 Just a paradox mardi 26 novembre 2024 - 7 min de lecture - outillage, golang, just, docker Comment, en refusant de céder aux solutions simplifiées des outils dédiés à l’expérience développeur·euse, on peut finir par investir du temps à améliorer cette même expérience. Mastodon &ndash; Codeberg &ndash; XMPP &ndash; RSS CC - alexisjanvier.net 2025\",\"classification_terms\":[\"tags/golang\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/tags/just\",\"status\":200,\"title\":\"Just | Alexis Janvier\",\"word_count\":102,\"summary_text\":\"Just | Alexis Janvier Just | Alexis Janvier Aller directement au contenu Alexis Janvier Internet is not dead. It just smells funny. Combined Shape Combined Shape Accueil Blog Blogoliste Talks En ce moment À propos Mastodon &ndash; Codeberg &ndash; XMPP &ndash; RSS CC - alexisjanvier.net 2025 Contenus associés au tag Just 2024 Just a paradox mardi 26 novembre 2024 - 7 min de lecture - outillage, golang, just, docker Comment, en refusant de céder aux solutions simplifiées des outils dédiés à l’expérience développeur·euse, on peut finir par investir du temps à améliorer cette même expérience. Mastodon &ndash; Codeberg &ndash; XMPP &ndash; RSS CC - alexisjanvier.net 2025\",\"classification_terms\":[\"tags/just\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/tags/docker\",\"status\":200,\"title\":\"Docker | Alexis Janvier\",\"word_count\":234,\"summary_text\":\"Docker | Alexis Janvier Docker | Alexis Janvier Aller directement au contenu Alexis Janvier Internet is not dead. It just smells funny. Combined Shape Combined Shape Accueil Blog Blogoliste Talks En ce moment À propos Mastodon &ndash; Codeberg &ndash; XMPP &ndash; RSS CC - alexisjanvier.net 2025 Contenus associés au tag Docker 2024 Just a paradox mardi 26 novembre 2024 - 7 min de lecture - outillage, golang, just, docker Comment, en refusant de céder aux solutions simplifiées des outils dédiés à l’expérience développeur·euse, on peut finir par investir du temps à améliorer cette même expérience. 2018 Applications 12 facteurs: comment validez-vous votre configuration ? dimanche 2 décembre 2018 - 4 min de lecture - devops, docker Dès lors que nous livrons notre code sous forme d’image docker, comment s’assurer que\",\"classification_terms\":[\"tags/docker\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/talks/2024-10-30-github-floss-commune/\",\"status\":200,\"title\":\"Github est-il une FLOSS commune ? | Alexis Janvier\",\"word_count\":215,\"summary_text\":\"Github est-il une FLOSS commune ? | Alexis Janvier Github est-il une FLOSS commune ? | Alexis Janvier { \\\"@context\\\": \\\"https://schema.org\\\", \\\"@type\\\": \\\"Event\\\", \\\"location\\\": { \\\"@type\\\": \\\"Place\\\", \\\"address\\\": { \\\"@type\\\": \\\"PostalAddress\\\", \\\"postalCode\\\": \\\"14000\\\", \\\"addressLocality\\\": \\\"Caen\\\", \\\"addressCountry\\\": \\\"FR\\\" }, \\\"name\\\": \\\"CaenCamp\\\" }, \\\"name\\\": \\\"Github est-il une FLOSS commune ?\\\", \\\"startDate\\\": \\\"2024-10-30 00:00:00 \\\\u002b0000 UTC\\\", \\\"description\\\": \\\"Github soutient-il vraiment le logiciel libre et open source ?\\\", \\\"eventAttendanceMode\\\": \\\"OfflineEventAttendanceMode\\\", \\\"eventStatus\\\": \\\"EventScheduled\\\", \\\"performer\\\": { \\\"@type\\\": \\\"Person\\\", \\\"address\\\": { \\\"@type\\\": \\\"PostalAddress\\\", \\\"addressLocality\\\": \\\"Caen\\\", \\\"postalCode\\\": \\\"14000\\\", \\\"addressCountry\\\": \\\"FR\\\" }, \\\"image\\\": \\\"https://secure.gravatar.com/avatar/4ca5068a7c55a229d9546da2f51e2f53\\\", \\\"jobTitle\\\": \\\"Développeur\\\", \\\"name\\\":\",\"classification_terms\":[\"talks/2024-10-30-github-floss-commune\",\"address\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":1,\"depth\":1},{\"path\":\"/talks/2021-10-14.wifi-communautaire/\",\"status\":200,\"title\":\"Soirée bidouille de réseaux informatiques | Alexis Janvier\",\"word_count\":234,\"summary_text\":\"Soirée bidouille de réseaux informatiques | Alexis Janvier Soirée bidouille de réseaux informatiques | Alexis Janvier { \\\"@context\\\": \\\"https://schema.org\\\", \\\"@type\\\": \\\"Event\\\", \\\"location\\\": { \\\"@type\\\": \\\"Place\\\", \\\"address\\\": { \\\"@type\\\": \\\"PostalAddress\\\", \\\"postalCode\\\": \\\"14000\\\", \\\"addressLocality\\\": \\\"Caen\\\", \\\"addressCountry\\\": \\\"FR\\\" }, \\\"name\\\": \\\"Festival Turfu\\\" }, \\\"name\\\": \\\"Soirée bidouille de réseaux informatiques\\\", \\\"startDate\\\": \\\"2021-10-14 00:00:00 \\\\u002b0000 UTC\\\", \\\"description\\\": \\\"Atelier autour de la mise en place d\\\\u0027un réseau wifi communautaire. Ou tout du moins de l\\\\u0027intérêt ou non de le faire.\\\", \\\"eventAttendanceMode\\\": \\\"OfflineEventAttendanceMode\\\", \\\"eventStatus\\\": \\\"EventScheduled\\\", \\\"performer\\\": { \\\"@type\\\": \\\"Person\\\", \\\"address\\\": { \\\"@type\\\": \\\"PostalAddress\\\", \\\"addressLocality\\\": \\\"Caen\\\", \\\"postalCode\\\": \\\"14000\\\", \\\"addressCountry\\\": \\\"FR\\\" }, \\\"image\\\": \\\"https://secure.gra\",\"classification_terms\":[\"talks/2021-10-14.wifi-communautaire\",\"address\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":1,\"depth\":1},{\"path\":\"/blog/blogroll-depuis-opml-avec-hugo/\",\"status\":200,\"title\":\"Générer une blogoliste depuis un fichier opml avec Hugo | Alexis Janvier\",\"word_count\":1111,\"summary_text\":\"Générer une blogoliste depuis un fichier opml avec Hugo | Alexis Janvier Générer une blogoliste depuis un fichier opml avec Hugo | Alexis Janvier { \\\"mainEntityOfPage\\\": { \\\"@type\\\": \\\"WebPage\\\", \\\"@id\\\": \\\"https:\\\\/\\\\/alexisjanvier.net\\\\/blog\\\\/blogroll-depuis-opml-avec-hugo\\\\/\\\" }, \\\"description\\\": \\\"Une blogoliste, c\\\\u0027est un peu un résultat de moteur de recherche généré non pas par un algo, mais par une personne. Si vous avez un lecteur RSS pour votre veille, voici comment utiliser votre liste de flux pour générer une page blogoliste avec Hugo.\\\", \\\"url\\\": \\\"https:\\\\/\\\\/alexisjanvier.net\\\\/blog\\\\/blogroll-depuis-opml-avec-hugo\\\\/\\\", \\\"@type\\\": \\\"BlogPosting\\\", \\\"headline\\\": \\\"Générer une blogoliste depuis un fichier opml avec Hugo\\\", \\\"dateModified\\\": \\\"2024-08-20 05:32:50 \\\\u002b0000 UTC\\\", \\\"datePublished\\\": \\\"2024-08-20 05:32:50 \\\\u002b0000 UTC\\\", \\\"author\\\": { \\\"@type\\\": \\\"Person\\\", \\\"name\\\": \\\"Alexis Ja\",\"classification_terms\":[\"blog/blogroll-depuis-opml-avec-hugo\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":2},{\"path\":\"/tags/blog\",\"status\":200,\"title\":\"Blog | Alexis Janvier\",\"word_count\":125,\"summary_text\":\"Blog | Alexis Janvier Blog | Alexis Janvier Aller directement au contenu Alexis Janvier Internet is not dead. It just smells funny. Combined Shape Combined Shape Accueil Blog Blogoliste Talks En ce moment À propos Mastodon &ndash; Codeberg &ndash; XMPP &ndash; RSS CC - alexisjanvier.net 2025 Contenus associés au tag Blog 2024 Générer une blogoliste depuis un fichier opml avec Hugo mardi 20 août 2024 - 5 min de lecture - blog, rss, hugo Une blogoliste, c&#39;est un peu un résultat de moteur de recherche généré non pas par un algo, mais par une personne. Si vous avez un lecteur RSS pour votre veille, voici comment utiliser votre liste de flux pour générer une page blogoliste avec Hugo. Mastodon &ndash; Codeberg &ndash; XMPP &ndash; RSS CC - alexisjanvier.net 2025\",\"classification_terms\":[\"tags/blog\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/tags/rss\",\"status\":200,\"title\":\"Rss | Alexis Janvier\",\"word_count\":125,\"summary_text\":\"Rss | Alexis Janvier Rss | Alexis Janvier Aller directement au contenu Alexis Janvier Internet is not dead. It just smells funny. Combined Shape Combined Shape Accueil Blog Blogoliste Talks En ce moment À propos Mastodon &ndash; Codeberg &ndash; XMPP &ndash; RSS CC - alexisjanvier.net 2025 Contenus associés au tag Rss 2024 Générer une blogoliste depuis un fichier opml avec Hugo mardi 20 août 2024 - 5 min de lecture - blog, rss, hugo Une blogoliste, c&#39;est un peu un résultat de moteur de recherche généré non pas par un algo, mais par une personne. Si vous avez un lecteur RSS pour votre veille, voici comment utiliser votre liste de flux pour générer une page blogoliste avec Hugo. Mastodon &ndash; Codeberg &ndash; XMPP &ndash; RSS CC - alexisjanvier.net 2025\",\"classification_terms\":[\"tags/rss\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/tags/hugo\",\"status\":200,\"title\":\"Hugo | Alexis Janvier\",\"word_count\":290,\"summary_text\":\"Hugo | Alexis Janvier Hugo | Alexis Janvier Aller directement au contenu Alexis Janvier Internet is not dead. It just smells funny. Combined Shape Combined Shape Accueil Blog Blogoliste Talks En ce moment À propos Mastodon &ndash; Codeberg &ndash; XMPP &ndash; RSS CC - alexisjanvier.net 2025 Contenus associés au tag Hugo 2024 Générer une blogoliste depuis un fichier opml avec Hugo mardi 20 août 2024 - 5 min de lecture - blog, rss, hugo Une blogoliste, c&#39;est un peu un résultat de moteur de recherche généré non pas par un algo, mais par une personne. Si vous avez un lecteur RSS pour votre veille, voici comment utiliser votre liste de flux pour générer une page blogoliste avec Hugo. 2022 Pourquoi choisir JSON Resume pour maintenir son CV lundi 31 janvier 2022 - 7 min de lecture - softskill, metier, hugo Mainte\",\"classification_terms\":[\"tags/hugo\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/blog/migrer-une-application-react-de-cra-a-vite/\",\"status\":200,\"title\":\"Migrer une application React de CRA à Vite | Alexis Janvier\",\"word_count\":1112,\"summary_text\":\"Migrer une application React de CRA à Vite | Alexis Janvier Migrer une application React de CRA à Vite | Alexis Janvier { \\\"mainEntityOfPage\\\": { \\\"@type\\\": \\\"WebPage\\\", \\\"@id\\\": \\\"https:\\\\/\\\\/alexisjanvier.net\\\\/blog\\\\/migrer-une-application-react-de-cra-a-vite\\\\/\\\" }, \\\"description\\\": \\\"Rapide retour d\\\\u0027expérience sur la migration d\\\\u0027une application React gérée avec l\\\\u0027outillage CRA vers l\\\\u0027outillage Vite\\\", \\\"url\\\": \\\"https:\\\\/\\\\/alexisjanvier.net\\\\/blog\\\\/migrer-une-application-react-de-cra-a-vite\\\\/\\\", \\\"@type\\\": \\\"BlogPosting\\\", \\\"headline\\\": \\\"Migrer une application React de CRA à Vite\\\", \\\"dateModified\\\": \\\"2024-06-04 10:32:50 \\\\u002b0000 UTC\\\", \\\"datePublished\\\": \\\"2024-06-04 10:32:50 \\\\u002b0000 UTC\\\", \\\"author\\\": { \\\"@type\\\": \\\"Person\\\", \\\"name\\\": \\\"Alexis Janvier\\\" }, \\\"@context\\\": \\\"https://schema.org\\\" } Aller directement au contenu Alexis Janvier Internet is not dead. It just\",\"classification_terms\":[\"blog/migrer-une-application-react-de-cra-a-vite\",\"api\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":2},{\"path\":\"/tags/javascript\",\"status\":200,\"title\":\"Javascript | Alexis Janvier\",\"word_count\":1041,\"summary_text\":\"Javascript | Alexis Janvier Javascript | Alexis Janvier Aller directement au contenu Alexis Janvier Internet is not dead. It just smells funny. Combined Shape Combined Shape Accueil Blog Blogoliste Talks En ce moment À propos Mastodon &ndash; Codeberg &ndash; XMPP &ndash; RSS CC - alexisjanvier.net 2025 Contenus associés au tag Javascript 2024 Migrer une application React de CRA à Vite mardi 4 juin 2024 - 5 min de lecture - javascript, outillage, react Rapide retour d&#39;expérience sur la migration d&#39;une application React gérée avec l&#39;outillage CRA vers l&#39;outillage Vite 2023 nodemon, sans npm ni nodemon jeudi 6 juillet 2023 - 2 min de lecture - javascript, anti-npm-npm-club Comment faire pour relancer automatiquement un processus node lorsque le code est modifié, sans npm ni nodemon ? 2021 Utiliser des b\",\"classification_terms\":[\"tags/javascript\",\"api\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":5,\"depth\":2},{\"path\":\"/tags/react\",\"status\":200,\"title\":\"React | Alexis Janvier\",\"word_count\":96,\"summary_text\":\"React | Alexis Janvier React | Alexis Janvier Aller directement au contenu Alexis Janvier Internet is not dead. It just smells funny. Combined Shape Combined Shape Accueil Blog Blogoliste Talks En ce moment À propos Mastodon &ndash; Codeberg &ndash; XMPP &ndash; RSS CC - alexisjanvier.net 2025 Contenus associés au tag React 2024 Migrer une application React de CRA à Vite mardi 4 juin 2024 - 5 min de lecture - javascript, outillage, react Rapide retour d&#39;expérience sur la migration d&#39;une application React gérée avec l&#39;outillage CRA vers l&#39;outillage Vite Mastodon &ndash; Codeberg &ndash; XMPP &ndash; RSS CC - alexisjanvier.net 2025\",\"classification_terms\":[\"tags/react\",\"api\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/blog/nodemon-sans-npm-ni-nodemon/\",\"status\":200,\"title\":\"nodemon, sans npm ni nodemon | Alexis Janvier\",\"word_count\":514,\"summary_text\":\"nodemon, sans npm ni nodemon | Alexis Janvier nodemon, sans npm ni nodemon | Alexis Janvier { \\\"mainEntityOfPage\\\": { \\\"@type\\\": \\\"WebPage\\\", \\\"@id\\\": \\\"https:\\\\/\\\\/alexisjanvier.net\\\\/blog\\\\/nodemon-sans-npm-ni-nodemon\\\\/\\\" }, \\\"description\\\": \\\"Comment faire pour relancer automatiquement un processus node lorsque le code est modifié, sans npm ni nodemon ?\\\", \\\"url\\\": \\\"https:\\\\/\\\\/alexisjanvier.net\\\\/blog\\\\/nodemon-sans-npm-ni-nodemon\\\\/\\\", \\\"@type\\\": \\\"BlogPosting\\\", \\\"headline\\\": \\\"nodemon, sans npm ni nodemon\\\", \\\"dateModified\\\": \\\"2023-07-06 00:00:00 \\\\u002b0000 UTC\\\", \\\"datePublished\\\": \\\"2023-07-06 00:00:00 \\\\u002b0000 UTC\\\", \\\"author\\\": { \\\"@type\\\": \\\"Person\\\", \\\"name\\\": \\\"Alexis Janvier\\\" }, \\\"@context\\\": \\\"https://schema.org\\\" } Aller directement au contenu Alexis Janvier Internet is not dead. It just smells funny. Combined Shape Combined Shape Accueil Blog Blogoliste Talks En ce mo\",\"classification_terms\":[\"blog/nodemon-sans-npm-ni-nodemon\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":2},{\"path\":\"/tags/anti-npm-npm-club\",\"status\":200,\"title\":\"Anti-Npm-Npm-Club | Alexis Janvier\",\"word_count\":94,\"summary_text\":\"Anti-Npm-Npm-Club | Alexis Janvier Anti-Npm-Npm-Club | Alexis Janvier Aller directement au contenu Alexis Janvier Internet is not dead. It just smells funny. Combined Shape Combined Shape Accueil Blog Blogoliste Talks En ce moment À propos Mastodon &ndash; Codeberg &ndash; XMPP &ndash; RSS CC - alexisjanvier.net 2025 Contenus associés au tag Anti-Npm-Npm-Club 2023 nodemon, sans npm ni nodemon jeudi 6 juillet 2023 - 2 min de lecture - javascript, anti-npm-npm-club Comment faire pour relancer automatiquement un processus node lorsque le code est modifié, sans npm ni nodemon ? Mastodon &ndash; Codeberg &ndash; XMPP &ndash; RSS CC - alexisjanvier.net 2025\",\"classification_terms\":[\"tags/anti-npm-npm-club\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/blog/mes-commandes-git/\",\"status\":200,\"title\":\"Mes commandes Git | Alexis Janvier\",\"word_count\":1633,\"summary_text\":\"Mes commandes Git | Alexis Janvier Mes commandes Git | Alexis Janvier { \\\"mainEntityOfPage\\\": { \\\"@type\\\": \\\"WebPage\\\", \\\"@id\\\": \\\"https:\\\\/\\\\/alexisjanvier.net\\\\/blog\\\\/mes-commandes-git\\\\/\\\" }, \\\"description\\\": \\\"Ce sixième et dernier article de la série sur mon terminal aborde la commande que je lance le plus souvent (historique zsh à l\\\\u0027appui) : git. J\\\\u0027y explique mes alias de configuration, les cli et les scripts que j\\\\u0027ai pu ajouter au cours du temps, ainsi qu\\\\u0027un script unifiant ce foisonnement de commandes devenues hétérogènes : gitt.\\\", \\\"url\\\": \\\"https:\\\\/\\\\/alexisjanvier.net\\\\/blog\\\\/mes-commandes-git\\\\/\\\", \\\"@type\\\": \\\"BlogPosting\\\", \\\"headline\\\": \\\"Mes commandes Git\\\", \\\"dateModified\\\": \\\"2022-02-12 00:00:00 \\\\u002b0000 UTC\\\", \\\"datePublished\\\": \\\"2022-02-12 00:00:00 \\\\u002b0000 UTC\\\", \\\"author\\\": { \\\"@type\\\": \\\"Person\\\", \\\"name\\\": \\\"Alexis Janvier\\\"\",\"classification_terms\":[\"blog/mes-commandes-git\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":2},{\"path\":\"/tags/terminal\",\"status\":200,\"title\":\"Terminal | Alexis Janvier\",\"word_count\":903,\"summary_text\":\"Terminal | Alexis Janvier Terminal | Alexis Janvier Aller directement au contenu Alexis Janvier Internet is not dead. It just smells funny. Combined Shape Combined Shape Accueil Blog Blogoliste Talks En ce moment À propos Mastodon &ndash; Codeberg &ndash; XMPP &ndash; RSS CC - alexisjanvier.net 2025 Contenus associés au tag Terminal 2022 Mes commandes Git samedi 12 février 2022 - 7 min de lecture - outillage, terminal - série: Mon terminal Ce sixième et dernier article de la série sur mon terminal aborde la commande que je lance le plus souvent (historique zsh à l&#39;appui) : git. J&#39;y explique mes alias de configuration, les cli et les scripts que j&#39;ai pu ajouter au cours du temps, ainsi qu&#39;un script unifiant ce foisonnement de commandes devenues hétérogènes : gitt. Mes commandes du quotidien vendredi\",\"classification_terms\":[\"tags/terminal\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/series/mon-terminal/\",\"status\":200,\"title\":\"Mon Terminal | Alexis Janvier\",\"word_count\":503,\"summary_text\":\"Mon Terminal | Alexis Janvier Mon Terminal | Alexis Janvier Aller directement au contenu Alexis Janvier Internet is not dead. It just smells funny. Combined Shape Combined Shape Accueil Blog Blogoliste Talks En ce moment À propos Mastodon &ndash; Codeberg &ndash; XMPP &ndash; RSS CC - alexisjanvier.net 2025 Série \\\"Mon Terminal\\\" Le terminal, mon atelier de travail lundi 7 février 2022 - 8 min de lecture - outillage, terminal - série: Mon terminal Pour ce premier article à propos de mon terminal, je tente de mettre du contexte. Quelle est la différence entre une console et un terminal ? C’est quoi le Shell ? Est-ce que j’utilise un terminal ou un émulateur de terminal ? Qu’est-ce qu’une cli ? Autant de questions que j’ai dû me poser avant de pouvoir considérer mon terminal comme étant mon atelier de travail. Un terminal\",\"classification_terms\":[\"series/mon-terminal\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/blog/mes-commandes-du-quotidien/\",\"status\":200,\"title\":\"Mes commandes du quotidien | Alexis Janvier\",\"word_count\":980,\"summary_text\":\"Mes commandes du quotidien | Alexis Janvier Mes commandes du quotidien | Alexis Janvier { \\\"mainEntityOfPage\\\": { \\\"@type\\\": \\\"WebPage\\\", \\\"@id\\\": \\\"https:\\\\/\\\\/alexisjanvier.net\\\\/blog\\\\/mes-commandes-du-quotidien\\\\/\\\" }, \\\"description\\\": \\\"Ce cinquième article de la série sur mon terminal est un peu une liste à la Prévert. Mais il y a tout de même un fil directeur : je me limite aux commandes que j\\\\u0027utilise au moins une fois par jour.\\\", \\\"url\\\": \\\"https:\\\\/\\\\/alexisjanvier.net\\\\/blog\\\\/mes-commandes-du-quotidien\\\\/\\\", \\\"@type\\\": \\\"BlogPosting\\\", \\\"headline\\\": \\\"Mes commandes du quotidien\\\", \\\"dateModified\\\": \\\"2022-02-11 00:00:00 \\\\u002b0000 UTC\\\", \\\"datePublished\\\": \\\"2022-02-11 00:00:00 \\\\u002b0000 UTC\\\", \\\"author\\\": { \\\"@type\\\": \\\"Person\\\", \\\"name\\\": \\\"Alexis Janvier\\\" }, \\\"@context\\\": \\\"https://schema.org\\\" } Aller directement au contenu Alexis Janvier Internet is not dead. It jus\",\"classification_terms\":[\"blog/mes-commandes-du-quotidien\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":2},{\"path\":\"/blog/lemulateur-de-terminal-kitty/\",\"status\":200,\"title\":\"L’émulateur de terminal Kitty | Alexis Janvier\",\"word_count\":1115,\"summary_text\":\"L’émulateur de terminal Kitty | Alexis Janvier L’émulateur de terminal Kitty | Alexis Janvier { \\\"mainEntityOfPage\\\": { \\\"@type\\\": \\\"WebPage\\\", \\\"@id\\\": \\\"https:\\\\/\\\\/alexisjanvier.net\\\\/blog\\\\/lemulateur-de-terminal-kitty\\\\/\\\" }, \\\"description\\\": \\\"Pour cette quatrième publication au sujet de mon terminal, je passe en revue les raisons m\\\\u0027ayant fait choisir Kitty comme émulateur : sa gestion de polices de caractère avec ligature, ses thèmes et sa gestion des onglets et fenêtres.\\\", \\\"url\\\": \\\"https:\\\\/\\\\/alexisjanvier.net\\\\/blog\\\\/lemulateur-de-terminal-kitty\\\\/\\\", \\\"@type\\\": \\\"BlogPosting\\\", \\\"headline\\\": \\\"L’émulateur de terminal Kitty\\\", \\\"dateModified\\\": \\\"2022-02-10 00:00:00 \\\\u002b0000 UTC\\\", \\\"datePublished\\\": \\\"2022-02-10 00:00:00 \\\\u002b0000 UTC\\\", \\\"author\\\": { \\\"@type\\\": \\\"Person\\\", \\\"name\\\": \\\"Alexis Janvier\\\" }, \\\"@context\\\": \\\"https://schema.org\\\" } Aller directement au conte\",\"classification_terms\":[\"blog/lemulateur-de-terminal-kitty\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":2},{\"path\":\"/blog/pourquoi-j-utilise-le-shell-zsh/\",\"status\":200,\"title\":\"Pourquoi j'utilise le shell zsh | Alexis Janvier\",\"word_count\":1467,\"summary_text\":\"Pourquoi j'utilise le shell zsh | Alexis Janvier Pourquoi j&#39;utilise le shell zsh | Alexis Janvier { \\\"mainEntityOfPage\\\": { \\\"@type\\\": \\\"WebPage\\\", \\\"@id\\\": \\\"https:\\\\/\\\\/alexisjanvier.net\\\\/blog\\\\/pourquoi-j-utilise-le-shell-zsh\\\\/\\\" }, \\\"description\\\": \\\"Ce troisième article de la série sur ma console pourrait être très technique, tant les discussions sur les différents Shell peuvent être polémiques et pointues (et barbantes). Mais il ne l\\\\u0027est pas, car je m\\\\u0027y borne à parler de la configuration de zsh et des quelques points ayant emporté mon adhésion : la complétion, Oh My Zsh et les alias.\\\", \\\"url\\\": \\\"https:\\\\/\\\\/alexisjanvier.net\\\\/blog\\\\/pourquoi-j-utilise-le-shell-zsh\\\\/\\\", \\\"@type\\\": \\\"BlogPosting\\\", \\\"headline\\\": \\\"Pourquoi j\\\\u0027utilise le shell zsh\\\", \\\"dateModified\\\": \\\"2022-02-09 00:00:00 \\\\u002b0000 UTC\\\", \\\"datePublished\\\": \\\"2022-02-09 00:00:00 \\\\u002\",\"classification_terms\":[\"blog/pourquoi-j-utilise-le-shell-zsh\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":2},{\"path\":\"/blog/un-terminal-transposable-grace-aux-dotfiles/\",\"status\":200,\"title\":\"Un terminal transposable grâce aux dotfiles | Alexis Janvier\",\"word_count\":1363,\"summary_text\":\"Un terminal transposable grâce aux dotfiles | Alexis Janvier Un terminal transposable grâce aux dotfiles | Alexis Janvier { \\\"mainEntityOfPage\\\": { \\\"@type\\\": \\\"WebPage\\\", \\\"@id\\\": \\\"https:\\\\/\\\\/alexisjanvier.net\\\\/blog\\\\/un-terminal-transposable-grace-aux-dotfiles\\\\/\\\" }, \\\"description\\\": \\\"Dès que l\\\\u0027on commence à utiliser quotidiennement le terminal, on cherche à l\\\\u0027adapter à ses habitudes via des fichiers de configuration : les dotfiles. Ce second article aborde l\\\\u0027organisation de ces fichiers, mais aussi une stratégie permettant de les sauvegarder et donc de les partager. Et s\\\\u0027il existe plusieurs outils pour effectuer cette tâche, je parle de celui que j\\\\u0027utilise maintenant : Stow.\\\", \\\"url\\\": \\\"https:\\\\/\\\\/alexisjanvier.net\\\\/blog\\\\/un-terminal-transposable-grace-aux-dotfiles\\\\/\\\", \\\"@type\\\": \\\"BlogPosting\\\", \\\"headline\\\": \\\"Un terminal transposable grâce a\",\"classification_terms\":[\"blog/un-terminal-transposable-grace-aux-dotfiles\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":2},{\"path\":\"/blog/le-terminal-mon-atelier-de-travail/\",\"status\":200,\"title\":\"Le terminal, mon atelier de travail | Alexis Janvier\",\"word_count\":1829,\"summary_text\":\"Le terminal, mon atelier de travail | Alexis Janvier Le terminal, mon atelier de travail | Alexis Janvier { \\\"mainEntityOfPage\\\": { \\\"@type\\\": \\\"WebPage\\\", \\\"@id\\\": \\\"https:\\\\/\\\\/alexisjanvier.net\\\\/blog\\\\/le-terminal-mon-atelier-de-travail\\\\/\\\" }, \\\"description\\\": \\\"Pour ce premier article à propos de mon terminal, je tente de mettre du contexte. Quelle est la différence entre une console et un terminal ? C’est quoi le Shell ? Est-ce que j’utilise un terminal ou un émulateur de terminal ? Qu’est-ce qu’une cli ? Autant de questions que j’ai dû me poser avant de pouvoir considérer mon terminal comme étant mon atelier de travail. \\\", \\\"url\\\": \\\"https:\\\\/\\\\/alexisjanvier.net\\\\/blog\\\\/le-terminal-mon-atelier-de-travail\\\\/\\\", \\\"@type\\\": \\\"BlogPosting\\\", \\\"headline\\\": \\\"Le terminal, mon atelier de travail\\\", \\\"dateModified\\\": \\\"2022-02-07 00:00:00 \\\\u002b0000 UTC\\\", \\\"datePublished\\\": \\\"202\",\"classification_terms\":[\"blog/le-terminal-mon-atelier-de-travail\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":2},{\"path\":\"/blog/pourquoi-choisir-json-resume-pour-maintenir-son-curriculum-vitae/\",\"status\":200,\"title\":\"Pourquoi choisir JSON Resume pour maintenir son CV | Alexis Janvier\",\"word_count\":1749,\"summary_text\":\"Pourquoi choisir JSON Resume pour maintenir son CV | Alexis Janvier Pourquoi choisir JSON Resume pour maintenir son CV | Alexis Janvier { \\\"mainEntityOfPage\\\": { \\\"@type\\\": \\\"WebPage\\\", \\\"@id\\\": \\\"https:\\\\/\\\\/alexisjanvier.net\\\\/blog\\\\/pourquoi-choisir-json-resume-pour-maintenir-son-curriculum-vitae\\\\/\\\" }, \\\"description\\\": \\\"Maintenir régulièrement à jour son curriculum vitæ dans un secteur d’activité où l’on est (trop ?) souvent amené à changer d’employeurs ou de clients, c’est faire preuve de prévoyance. Mais s’imaginer que ses projets publics sur Github ou son profil LinkedIn suffisent, c’est sans doute un manque de clairvoyance. Une meilleure stratégie pour conserver les traces de son parcours professionnel consiste à investir sur un format dédié et interopérable : le JSON Resume.\\\", \\\"url\\\": \\\"https:\\\\/\\\\/alexisjanvier.net\\\\/blog\\\\/pourquoi-choisir-json-resume-pour-maintenir-\",\"classification_terms\":[\"blog/pourquoi-choisir-json-resume-pour-maintenir-son-curriculum-vitae\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":4,\"depth\":2},{\"path\":\"/tags/softskill\",\"status\":200,\"title\":\"Softskill | Alexis Janvier\",\"word_count\":151,\"summary_text\":\"Softskill | Alexis Janvier Softskill | Alexis Janvier Aller directement au contenu Alexis Janvier Internet is not dead. It just smells funny. Combined Shape Combined Shape Accueil Blog Blogoliste Talks En ce moment À propos Mastodon &ndash; Codeberg &ndash; XMPP &ndash; RSS CC - alexisjanvier.net 2025 Contenus associés au tag Softskill 2022 Pourquoi choisir JSON Resume pour maintenir son CV lundi 31 janvier 2022 - 7 min de lecture - softskill, metier, hugo Maintenir régulièrement à jour son curriculum vitæ dans un secteur d’activité où l’on est (trop ?) souvent amené à changer d’employeurs ou de clients, c’est faire preuve de prévoyance. Mais s’imaginer que ses projets publics sur Github ou son profil LinkedIn suffisent, c’est sans doute un manque de clairvoyance. Une meilleure stratégie pour conserver les traces de\",\"classification_terms\":[\"tags/softskill\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/tags/metier\",\"status\":200,\"title\":\"Metier | Alexis Janvier\",\"word_count\":313,\"summary_text\":\"Metier | Alexis Janvier Metier | Alexis Janvier Aller directement au contenu Alexis Janvier Internet is not dead. It just smells funny. Combined Shape Combined Shape Accueil Blog Blogoliste Talks En ce moment À propos Mastodon &ndash; Codeberg &ndash; XMPP &ndash; RSS CC - alexisjanvier.net 2025 Contenus associés au tag Metier 2022 Pourquoi choisir JSON Resume pour maintenir son CV lundi 31 janvier 2022 - 7 min de lecture - softskill, metier, hugo Maintenir régulièrement à jour son curriculum vitæ dans un secteur d’activité où l’on est (trop ?) souvent amené à changer d’employeurs ou de clients, c’est faire preuve de prévoyance. Mais s’imaginer que ses projets publics sur Github ou son profil LinkedIn suffisent, c’est sans doute un manque de clairvoyance. Une meilleure stratégie pour conserver les traces de son p\",\"classification_terms\":[\"tags/metier\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":1,\"depth\":2},{\"path\":\"/blog/pourquoi-choisir-hugo-comme-generateur-de-site-statique/\",\"status\":200,\"title\":\"Pourquoi choisir Hugo comme générateur de site statique | Alexis Janvier\",\"word_count\":1371,\"summary_text\":\"Pourquoi choisir Hugo comme générateur de site statique | Alexis Janvier Pourquoi choisir Hugo comme générateur de site statique | Alexis Janvier { \\\"mainEntityOfPage\\\": { \\\"@type\\\": \\\"WebPage\\\", \\\"@id\\\": \\\"https:\\\\/\\\\/alexisjanvier.net\\\\/blog\\\\/pourquoi-choisir-hugo-comme-generateur-de-site-statique\\\\/\\\" }, \\\"description\\\": \\\"Un générateur statique de site est un peu le chainon entre un site écrit de A à Z en HTML\\\\/CSS à la main, et un site dynamique nécessitant un serveur et une technologie spécifique (PHP, Python, JavaScript, Elixir ...). Parmi l\\\\u0027offre pléthorique de générateur de ce type, pourquoi choisir Hugo ?\\\", \\\"url\\\": \\\"https:\\\\/\\\\/alexisjanvier.net\\\\/blog\\\\/pourquoi-choisir-hugo-comme-generateur-de-site-statique\\\\/\\\", \\\"@type\\\": \\\"BlogPosting\\\", \\\"headline\\\": \\\"Pourquoi choisir Hugo comme générateur de site statique\\\", \\\"dateModified\\\": \\\"2022-01-10 00:00:00 \\\\u002b0000 UTC\\\", \\\"datePub\",\"classification_terms\":[\"blog/pourquoi-choisir-hugo-comme-generateur-de-site-statique\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":2},{\"path\":\"/tags/static-generator\",\"status\":200,\"title\":\"Static-Generator | Alexis Janvier\",\"word_count\":184,\"summary_text\":\"Static-Generator | Alexis Janvier Static-Generator | Alexis Janvier Aller directement au contenu Alexis Janvier Internet is not dead. It just smells funny. Combined Shape Combined Shape Accueil Blog Blogoliste Talks En ce moment À propos Mastodon &ndash; Codeberg &ndash; XMPP &ndash; RSS CC - alexisjanvier.net 2025 Contenus associés au tag Static-Generator 2022 Pourquoi choisir Hugo comme générateur de site statique lundi 10 janvier 2022 - 6 min de lecture - static-generator, outillage, hugo Un générateur statique de site est un peu le chainon entre un site écrit de A à Z en HTML/CSS à la main, et un site dynamique nécessitant un serveur et une technologie spécifique (PHP, Python, JavaScript, Elixir ...). Parmi l&#39;offre pléthorique de générateur de ce type, pourquoi choisir Hugo ? 2017 Développer un site Gasby.js avec D\",\"classification_terms\":[\"tags/static-generator\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/blog/auto-hebergement-avec-une-machine-virtuelle-freebox/\",\"status\":200,\"title\":\"Auto-hébergement avec une machine virtuelle Freebox | Alexis Janvier\",\"word_count\":1379,\"summary_text\":\"Auto-hébergement avec une machine virtuelle Freebox | Alexis Janvier Auto-hébergement avec une machine virtuelle Freebox | Alexis Janvier { \\\"mainEntityOfPage\\\": { \\\"@type\\\": \\\"WebPage\\\", \\\"@id\\\": \\\"https:\\\\/\\\\/alexisjanvier.net\\\\/blog\\\\/auto-hebergement-avec-une-machine-virtuelle-freebox\\\\/\\\" }, \\\"description\\\": \\\"Plutôt que d\\\\u0027avoir à alimenter un serveur dédié, pourquoi ne pas utiliser directement ma box - qui devra être allumée quoi qu\\\\u0027il se passe - pour faire mon auto-hébergement web ?\\\", \\\"url\\\": \\\"https:\\\\/\\\\/alexisjanvier.net\\\\/blog\\\\/auto-hebergement-avec-une-machine-virtuelle-freebox\\\\/\\\", \\\"@type\\\": \\\"BlogPosting\\\", \\\"headline\\\": \\\"Auto-hébergement avec une machine virtuelle Freebox\\\", \\\"dateModified\\\": \\\"2021-12-27 00:00:00 \\\\u002b0000 UTC\\\", \\\"datePublished\\\": \\\"2021-12-27 00:00:00 \\\\u002b0000 UTC\\\", \\\"author\\\": { \\\"@type\\\": \\\"Person\\\", \\\"name\\\": \\\"Alexis Janvier\\\" }, \\\"@context\\\": \\\"https://s\",\"classification_terms\":[\"blog/auto-hebergement-avec-une-machine-virtuelle-freebox\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":4,\"depth\":2},{\"path\":\"/tags/infrastructure\",\"status\":200,\"title\":\"Infrastructure | Alexis Janvier\",\"word_count\":242,\"summary_text\":\"Infrastructure | Alexis Janvier Infrastructure | Alexis Janvier Aller directement au contenu Alexis Janvier Internet is not dead. It just smells funny. Combined Shape Combined Shape Accueil Blog Blogoliste Talks En ce moment À propos Mastodon &ndash; Codeberg &ndash; XMPP &ndash; RSS CC - alexisjanvier.net 2025 Contenus associés au tag Infrastructure 2021 Auto-hébergement avec une machine virtuelle Freebox lundi 27 décembre 2021 - 6 min de lecture - infrastructure, hebergement Plutôt que d&#39;avoir à alimenter un serveur dédié, pourquoi ne pas utiliser directement ma box - qui devra être allumée quoi qu&#39;il se passe - pour faire mon auto-hébergement web ? Soirée bidouille de réseaux informatiques jeudi 14 octobre 2021 - 1 min de lecture - infrastructure Atelier autour de la mise en place d&#39;un réseau wifi communau\",\"classification_terms\":[\"tags/infrastructure\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/blog/utiliser-des-balises-esi-aves-next-js/\",\"status\":200,\"title\":\"Utiliser des balises ESI avec Next.js | Alexis Janvier\",\"word_count\":1893,\"summary_text\":\"Utiliser des balises ESI avec Next.js | Alexis Janvier Utiliser des balises ESI avec Next.js | Alexis Janvier { \\\"mainEntityOfPage\\\": { \\\"@type\\\": \\\"WebPage\\\", \\\"@id\\\": \\\"https:\\\\/\\\\/alexisjanvier.net\\\\/blog\\\\/utiliser-des-balises-esi-aves-next-js\\\\/\\\" }, \\\"description\\\": \\\"Comment améliorer encore plus le temps de réponse d\\\\u0027un site basé sur Next.js ? Avec des ESI !\\\", \\\"url\\\": \\\"https:\\\\/\\\\/alexisjanvier.net\\\\/blog\\\\/utiliser-des-balises-esi-aves-next-js\\\\/\\\", \\\"@type\\\": \\\"BlogPosting\\\", \\\"headline\\\": \\\"Utiliser des balises ESI avec Next.js\\\", \\\"dateModified\\\": \\\"2021-11-01 00:00:00 \\\\u002b0000 UTC\\\", \\\"datePublished\\\": \\\"2021-11-01 00:00:00 \\\\u002b0000 UTC\\\", \\\"author\\\": { \\\"@type\\\": \\\"Person\\\", \\\"name\\\": \\\"Alexis Janvier\\\" }, \\\"@context\\\": \\\"https://schema.org\\\" } Aller directement au contenu Alexis Janvier Internet is not dead. It just smells funny. Combined Shape Combined Shape Accueil Blog B\",\"classification_terms\":[\"blog/utiliser-des-balises-esi-aves-next-js\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":2},{\"path\":\"/tags/programmation\",\"status\":200,\"title\":\"Programmation | Alexis Janvier\",\"word_count\":689,\"summary_text\":\"Programmation | Alexis Janvier Programmation | Alexis Janvier Aller directement au contenu Alexis Janvier Internet is not dead. It just smells funny. Combined Shape Combined Shape Accueil Blog Blogoliste Talks En ce moment À propos Mastodon &ndash; Codeberg &ndash; XMPP &ndash; RSS CC - alexisjanvier.net 2025 Contenus associés au tag Programmation 2021 Utiliser des balises ESI avec Next.js lundi 1 novembre 2021 - 8 min de lecture - programmation, javascript, protocole Comment améliorer encore plus le temps de réponse d&#39;un site basé sur Next.js ? Avec des ESI ! Utiliser une base SQlite dans react-admin jeudi 14 octobre 2021 - 6 min de lecture - programmation, javascript, database Pour utiliser une base de données dans une application web, nous devons construire une API. Mais que se passerait-il si nous pouvions utili\",\"classification_terms\":[\"tags/programmation\",\"api\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":6,\"depth\":2},{\"path\":\"/tags/protocole\",\"status\":200,\"title\":\"Protocole | Alexis Janvier\",\"word_count\":122,\"summary_text\":\"Protocole | Alexis Janvier Protocole | Alexis Janvier Aller directement au contenu Alexis Janvier Internet is not dead. It just smells funny. Combined Shape Combined Shape Accueil Blog Blogoliste Talks En ce moment À propos Mastodon &ndash; Codeberg &ndash; XMPP &ndash; RSS CC - alexisjanvier.net 2025 Contenus associés au tag Protocole 2021 Utiliser des balises ESI avec Next.js lundi 1 novembre 2021 - 8 min de lecture - programmation, javascript, protocole Comment améliorer encore plus le temps de réponse d&#39;un site basé sur Next.js ? Avec des ESI ! 2017 Le GraphQL, c&#39;est vraiment la fin du REST ? mardi 28 mars 2017 - 1 min de lecture - programmation, protocole Une introduction au GraphQL. Mastodon &ndash; Codeberg &ndash; XMPP &ndash; RSS CC - alexisjanvier.net 2025\",\"classification_terms\":[\"tags/protocole\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":2},{\"path\":\"/blog/utiliser-une-base-sqlite-dans-react-admin/\",\"status\":200,\"title\":\"Utiliser une base SQlite dans react-admin | Alexis Janvier\",\"word_count\":1332,\"summary_text\":\"Utiliser une base SQlite dans react-admin | Alexis Janvier Utiliser une base SQlite dans react-admin | Alexis Janvier { \\\"mainEntityOfPage\\\": { \\\"@type\\\": \\\"WebPage\\\", \\\"@id\\\": \\\"https:\\\\/\\\\/alexisjanvier.net\\\\/blog\\\\/utiliser-une-base-sqlite-dans-react-admin\\\\/\\\" }, \\\"description\\\": \\\"Pour utiliser une base de données dans une application web, nous devons construire une API. Mais que se passerait-il si nous pouvions utiliser une base de données directement depuis le navigateur ?\\\", \\\"url\\\": \\\"https:\\\\/\\\\/alexisjanvier.net\\\\/blog\\\\/utiliser-une-base-sqlite-dans-react-admin\\\\/\\\", \\\"@type\\\": \\\"BlogPosting\\\", \\\"headline\\\": \\\"Utiliser une base SQlite dans react-admin\\\", \\\"dateModified\\\": \\\"2021-10-14 00:00:00 \\\\u002b0000 UTC\\\", \\\"datePublished\\\": \\\"2021-10-14 00:00:00 \\\\u002b0000 UTC\\\", \\\"author\\\": { \\\"@type\\\": \\\"Person\\\", \\\"name\\\": \\\"Alexis Janvier\\\" }, \\\"@context\\\": \\\"https://schema.org\\\" } Aller directement\",\"classification_terms\":[\"blog/utiliser-une-base-sqlite-dans-react-admin\",\"api\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":2},{\"path\":\"/tags/database\",\"status\":200,\"title\":\"Database | Alexis Janvier\",\"word_count\":156,\"summary_text\":\"Database | Alexis Janvier Database | Alexis Janvier Aller directement au contenu Alexis Janvier Internet is not dead. It just smells funny. Combined Shape Combined Shape Accueil Blog Blogoliste Talks En ce moment À propos Mastodon &ndash; Codeberg &ndash; XMPP &ndash; RSS CC - alexisjanvier.net 2025 Contenus associés au tag Database 2021 Utiliser une base SQlite dans react-admin jeudi 14 octobre 2021 - 6 min de lecture - programmation, javascript, database Pour utiliser une base de données dans une application web, nous devons construire une API. Mais que se passerait-il si nous pouvions utiliser une base de données directement depuis le navigateur ? Using An SQLite Database Live In React-Admin jeudi 14 octobre 2021 - 5 min de lecture - programmation, javascript, database To use a database in a web app, we have to\",\"classification_terms\":[\"tags/database\",\"api\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_c",
        "score_reasons_json": "[]",
        "route_domain": "alexisjanvier.net",
        "display_domain": "alexisjanvier.net"
    },
    "explainability": {
        "summary": "alexisjanvier.net currently scores 64/100. Technical and crawl-quality evidence are doing most of the lifting for the score. Evidence confidence is strong enough for a relatively stable read. This is an estimated profile rather than a manually tracked one. Crawler access looks clean.",
        "badges": [
            {
                "label": "Profile",
                "value": "Estimated profile",
                "tone": "unknown",
                "detail": null
            },
            {
                "label": "Evidence confidence",
                "value": "High confidence",
                "tone": "good",
                "detail": "98/100"
            },
            {
                "label": "Traffic confidence",
                "value": "Solid confidence",
                "tone": "good",
                "detail": "77/100"
            },
            {
                "label": "Crawler access",
                "value": "Clean visibility",
                "tone": "good",
                "detail": null
            }
        ],
        "weighted_contributions": [
            {
                "label": "Quality system",
                "points": "+34.0",
                "tone": "good",
                "detail": "Technical quality, crawl depth, page structure, and implementation hygiene. Current subsystem score: 100/100."
            },
            {
                "label": "Reputation system",
                "points": "+16.7",
                "tone": "caution",
                "detail": "Authority, search visibility, reach, engagement, and registry stability. Current subsystem score: 49/100."
            },
            {
                "label": "Safety system",
                "points": "+32.0",
                "tone": "good",
                "detail": "Fraud, spam, and trust signals from infrastructure, crawl, and registry evidence. Current subsystem score: 100/100."
            },
            {
                "label": "Risk clamp",
                "points": "-19.0",
                "tone": "risk",
                "detail": "Safety thresholds capped the final score until the risk profile improves."
            }
        ],
        "evidence_cards": [
            {
                "label": "Authority and trust",
                "value": "51/100 · trust 80/100",
                "tone": "caution",
                "detail": "192 monthly visitors, 88 organic keywords, brand completeness 74/100, engagement 81/100."
            },
            {
                "label": "Backlink and search evidence",
                "value": "1 referring domains",
                "tone": "good",
                "detail": "1 backlinks across 1 referring domains. Diversity 92/100; spam penalty 0."
            },
            {
                "label": "Registry and domain stability",
                "value": "20.9 years old",
                "tone": "good",
                "detail": "Stability 100/100 · age 20.9 years · registrar Scaleway SAS · expires in 390 days."
            },
            {
                "label": "Safety and fraud posture",
                "value": "Safety 100/100 · fraud 0/100",
                "tone": "good",
                "detail": "Primary tag T · safety 100/100 · fraud 0/100."
            }
        ],
        "positives": [
            "Established domain age: 20.9 years.",
            "Low registrar / ownership churn with solid registry stability.",
            "Healthy crawl quality and on-page completeness.",
            "Search evidence is broad enough to classify with better confidence.",
            "Registry history looks stable, which supports legitimacy and trust.",
            "The domain has been registered for years, which usually improves trust confidence."
        ],
        "risks": [
            "External evidence was mixed or sparse, so the tag model keeps an uncertainty buffer instead of overcommitting."
        ],
        "freshness": [
            {
                "label": "Crawl evidence",
                "value": "2026-03-29 00:52:25",
                "tone": "risk",
                "detail": "Crawl and page content sample. Age: 18d ago."
            },
            {
                "label": "WHOIS snapshot",
                "value": "2026-03-19 00:46:06",
                "tone": "risk",
                "detail": "Registry profile and stability signals. Age: 28d ago."
            },
            {
                "label": "Keyword view",
                "value": "2026-04-16 20:24:07",
                "tone": "good",
                "detail": "Estimated visibility until tracked keyword snapshots exist. Age: 0s ago."
            },
            {
                "label": "Rank history",
                "value": "2026-04-16 20:24:07",
                "tone": "good",
                "detail": "Estimated trend derived from current profile and crawl signals. Age: 0s ago."
            },
            {
                "label": "Audience geography",
                "value": "Not captured yet",
                "tone": "unknown",
                "detail": "Audience mix is estimated from available signals rather than first-party audience logs."
            }
        ],
        "section_notes": {
            "audience": "Audience geography is estimated from category, country, traffic mix, and brand signals until first-party audience data is collected.",
            "keywords": "Top keywords are estimated from crawl language, brand, category, and visibility signals until tracked keyword snapshots are stored.",
            "history": "Rank history is estimated from the current profile because no stored history exists for this domain yet."
        },
        "base_weighted_score": 83,
        "fraud_clamp_penalty": 19,
        "final_score": 64
    },
    "insight_snapshot": {
        "version": 1,
        "generated_at": "2026-04-16T20:24:07+00:00",
        "domain": "alexisjanvier.net",
        "display_name": "Alexis Janvier",
        "is_tracked": false,
        "is_estimated": true,
        "overall_score": 64,
        "authority_score": 51,
        "trust_score": 80,
        "safety_score": 100,
        "fraud_score": 0,
        "confidence_score": 98,
        "traffic_confidence": 77,
        "last_crawled_at": "2026-03-29 00:52:25",
        "crawl_blocked": false,
        "summary": "alexisjanvier.net currently scores 64/100. Technical and crawl-quality evidence are doing most of the lifting for the score. Evidence confidence is strong enough for a relatively stable read. This is an estimated profile rather than a manually tracked one. Crawler access looks clean.",
        "badges": [
            {
                "label": "Profile",
                "value": "Estimated profile",
                "tone": "unknown",
                "detail": null
            },
            {
                "label": "Evidence confidence",
                "value": "High confidence",
                "tone": "good",
                "detail": "98/100"
            },
            {
                "label": "Traffic confidence",
                "value": "Solid confidence",
                "tone": "good",
                "detail": "77/100"
            },
            {
                "label": "Crawler access",
                "value": "Clean visibility",
                "tone": "good",
                "detail": null
            }
        ],
        "top_positive_signals": [
            "Established domain age: 20.9 years.",
            "Low registrar / ownership churn with solid registry stability.",
            "Healthy crawl quality and on-page completeness.",
            "Search evidence is broad enough to classify with better confidence.",
            "Registry history looks stable, which supports legitimacy and trust."
        ],
        "top_risk_signals": [
            "External evidence was mixed or sparse, so the tag model keeps an uncertainty buffer instead of overcommitting."
        ],
        "freshness": [
            {
                "label": "Crawl evidence",
                "value": "2026-03-29 00:52:25",
                "tone": "risk",
                "detail": "Crawl and page content sample. Age: 18d ago."
            },
            {
                "label": "WHOIS snapshot",
                "value": "2026-03-19 00:46:06",
                "tone": "risk",
                "detail": "Registry profile and stability signals. Age: 28d ago."
            },
            {
                "label": "Keyword view",
                "value": "2026-04-16 20:24:07",
                "tone": "good",
                "detail": "Estimated visibility until tracked keyword snapshots exist. Age: 0s ago."
            },
            {
                "label": "Rank history",
                "value": "2026-04-16 20:24:07",
                "tone": "good",
                "detail": "Estimated trend derived from current profile and crawl signals. Age: 0s ago."
            },
            {
                "label": "Audience geography",
                "value": "Not captured yet",
                "tone": "unknown",
                "detail": "Audience mix is estimated from available signals rather than first-party audience logs."
            }
        ],
        "top_tags": [
            {
                "code": "T",
                "label": "Trusted",
                "tone": "good"
            },
            {
                "code": "Uncertain",
                "label": "Uncertain",
                "tone": "unknown"
            }
        ]
    },
    "is_tracked": false,
    "is_estimated": true,
    "live_state": {
        "status": "processing",
        "status_label": "Cache build running",
        "message": "The refreshed page cache is still being built for this domain.",
        "updated_at": "2026-04-17T11:54:48+00:00"
    },
    "refresh_state": {
        "canRequest": false,
        "queued": true,
        "processing": true,
        "stageKey": "cache-queued",
        "stageLabel": "Cache build running",
        "cooldownUntil": null,
        "message": "The refreshed page cache is still being built for this domain.",
        "action": "/domain/alexisjanvier.net/refresh",
        "isGuestCooldown": false,
        "cooldownSeconds": 0
    },
    "urlscan_report": {
        "domain": "alexisjanvier.net",
        "status": "idle",
        "submitted_at": null,
        "completed_at": null,
        "last_checked_at": null,
        "last_error": "",
        "submitted_url": "https://alexisjanvier.net/",
        "uuid": "",
        "result_url": "",
        "api_result_url": "",
        "visibility": "public",
        "summary": "No urlscan.io report has been requested for this domain yet.",
        "report": [],
        "report_summary": [],
        "is_fresh": false,
        "can_retry": true,
        "poll_after_seconds": 20
    }
}