<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Giulio Marinelli</title>
    <description>The latest articles on DEV Community by Giulio Marinelli (@giuliomarinelli).</description>
    <link>https://dev.to/giuliomarinelli</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1317202%2F906acac1-994c-4082-93ce-eef06a66d172.png</url>
      <title>DEV Community: Giulio Marinelli</title>
      <link>https://dev.to/giuliomarinelli</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/giuliomarinelli"/>
    <language>en</language>
    <item>
      <title>Could GPT-5.6 Sol Have a Dangerous Vulnerability?</title>
      <dc:creator>Giulio Marinelli</dc:creator>
      <pubDate>Sat, 25 Jul 2026 14:14:54 +0000</pubDate>
      <link>https://dev.to/giuliomarinelli/could-gpt-56-sol-have-a-dangerous-vulnerability-485f</link>
      <guid>https://dev.to/giuliomarinelli/could-gpt-56-sol-have-a-dangerous-vulnerability-485f</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Content note:&lt;/strong&gt; This article discusses grief, emotional vulnerability, self-destructive behavior, and the potential risk of self-harm.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; This article presents a behavioral hypothesis supported by preliminary empirical observations from a series of interactions and informal tests conducted with GPT-5.6 Sol. During these tests, I observed recurring conversational patterns and subtle behaviors that motivated the analysis developed below. However, the results were not consistently reproducible, the testing methodology was not controlled, and the available evidence remains partial. The article should therefore not be interpreted as a clinical study, a definitive safety assessment, or a claim of access to OpenAI’s internal training process. Its purpose is to document an observed phenomenon, propose a plausible explanation, and identify a potential risk that deserves systematic and independently reproducible investigation.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;GPT-5.6 Sol is one of the most impressive reasoning models I have ever used.&lt;/p&gt;

&lt;p&gt;Its planning is remarkably structured. Its tool use is excellent. It can decompose complex problems, coordinate long workflows, preserve logical consistency, and produce highly optimized solutions.&lt;/p&gt;

&lt;p&gt;For engineering, science, software architecture, research, and agentic work, these properties are extraordinary strengths.&lt;/p&gt;

&lt;p&gt;But after observing some unusual interactions, I began to wonder whether the same optimization that makes GPT-5.6 Sol such a powerful problem solver could expose an unexpected vulnerability.&lt;/p&gt;

&lt;p&gt;Not a traditional cybersecurity vulnerability.&lt;/p&gt;

&lt;p&gt;Not prompt injection.&lt;/p&gt;

&lt;p&gt;Not data leakage.&lt;/p&gt;

&lt;p&gt;Not unreliable tool use.&lt;/p&gt;

&lt;p&gt;Something more fundamental:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A conversational safety vulnerability caused by excessive alignment toward logical correctness and insufficient alignment toward the human being receiving the answer.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  A Hypothesis, Not a Verdict
&lt;/h2&gt;

&lt;p&gt;I want to be precise about what I am claiming.&lt;/p&gt;

&lt;p&gt;I do not know the exact training pipeline used for GPT-5.6 Sol. I do not have access to its reward models, preference data, system-level instructions, or internal evaluation results beyond what has been made public.&lt;/p&gt;

&lt;p&gt;I therefore cannot prove that RLHF is responsible for the behavior I observed.&lt;/p&gt;

&lt;p&gt;Nevertheless, based on years of interaction with different generations of GPT models, my leading hypothesis is that the balance achieved during post-training — particularly through RLHF and related preference-optimization processes — may be strongly oriented toward reasoning performance, task completion, and process reliability, while being comparatively weaker in relational conversation.&lt;/p&gt;

&lt;p&gt;This does not mean that GPT-5.6 Sol has no safety training.&lt;/p&gt;

&lt;p&gt;It does not mean that it is always insensitive.&lt;/p&gt;

&lt;p&gt;It means that underneath its explicit safeguards, its dominant conversational tendency sometimes appears to remain extremely literal, analytical, and epistemically cautious.&lt;/p&gt;

&lt;p&gt;That is usually an advantage.&lt;/p&gt;

&lt;p&gt;In emotionally sensitive conversations, it may become a liability.&lt;/p&gt;

&lt;h2&gt;
  
  
  Logical Correctness Is Not Human Alignment
&lt;/h2&gt;

&lt;p&gt;A sentence can be logically defensible and still be psychologically harmful.&lt;/p&gt;

&lt;p&gt;This is the central point.&lt;/p&gt;

&lt;p&gt;Consider a user who says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I’m afraid I may have a serious illness.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A logic-first model might answer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;That possibility cannot be completely excluded without a medical examination.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The statement is correct.&lt;/p&gt;

&lt;p&gt;It avoids making an unsupported diagnosis. It preserves uncertainty. It does not promise that everything will be fine.&lt;/p&gt;

&lt;p&gt;From a strictly epistemic perspective, it may be an excellent answer.&lt;/p&gt;

&lt;p&gt;But imagine that the user is experiencing severe health anxiety and is not asking for a formal differential diagnosis. The user may be looking for help grounding their thoughts before deciding what to do next.&lt;/p&gt;

&lt;p&gt;A more human-aligned response might be:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I understand why that possibility is frightening. Many symptoms can have common and less serious explanations, and anxiety often pushes us toward the worst-case interpretation. Let’s separate what you currently know from what you are afraid might be true, and then consider whether speaking with a healthcare professional would be appropriate.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Both answers preserve uncertainty.&lt;/p&gt;

&lt;p&gt;Only one of them understands what the uncertainty is doing to the person.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Answer May Be True and Still Be the Wrong Answer
&lt;/h2&gt;

&lt;p&gt;Human conversation is not merely an exchange of propositions.&lt;/p&gt;

&lt;p&gt;Meaning also depends on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;emotional context;&lt;/li&gt;
&lt;li&gt;implied intent;&lt;/li&gt;
&lt;li&gt;timing;&lt;/li&gt;
&lt;li&gt;tone;&lt;/li&gt;
&lt;li&gt;shared assumptions;&lt;/li&gt;
&lt;li&gt;vulnerability;&lt;/li&gt;
&lt;li&gt;irony and sarcasm;&lt;/li&gt;
&lt;li&gt;what the listener is psychologically capable of processing at that moment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A reasoning model may interpret every statement as a problem requiring analytical completion.&lt;/p&gt;

&lt;p&gt;A human interlocutor sometimes understands that the analytical problem is not the real problem.&lt;/p&gt;

&lt;p&gt;The person may not be asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can you formally determine whether the worst-case scenario is impossible?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;They may actually be asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can you help me avoid being consumed by this fear?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Those are not equivalent requests.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example: Grief
&lt;/h2&gt;

&lt;p&gt;Imagine someone who recently lost a person they loved.&lt;/p&gt;

&lt;p&gt;They write:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Since they died, it feels as if my life is over.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A literal response could analyze the sentence:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Your previous way of life has ended in an important sense, and nothing can restore exactly what existed before.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Again, this is not necessarily false.&lt;/p&gt;

&lt;p&gt;It may even sound philosophically sophisticated.&lt;/p&gt;

&lt;p&gt;But it could be devastating to someone in acute grief.&lt;/p&gt;

&lt;p&gt;A relationally aligned answer would recognize that the sentence is probably not a request for ontological analysis:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What happened has changed your life profoundly, and right now the pain may make it impossible to imagine a future that feels meaningful. That feeling is real, but it is not proof that your life is permanently over. You do not have to solve the rest of your life while you are carrying the full weight of this loss.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The second response does not lie.&lt;/p&gt;

&lt;p&gt;It does not promise that grief will disappear.&lt;/p&gt;

&lt;p&gt;It simply refuses to mistake emotional despair for a proposition that needs to be logically validated.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example: Self-Worth
&lt;/h2&gt;

&lt;p&gt;Consider another sentence:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I don’t know whether my life has any value.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A highly epistemic model could respond:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Human value is not objectively measurable, so it cannot be proved in a strictly empirical sense.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This statement might survive every conventional factuality evaluation.&lt;/p&gt;

&lt;p&gt;It contains no insult, threat, prohibited instruction, or explicit encouragement of self-harm.&lt;/p&gt;

&lt;p&gt;Yet in the wrong context, it could be profoundly unsafe.&lt;/p&gt;

&lt;p&gt;A distressed user may not hear a sophisticated observation about moral philosophy.&lt;/p&gt;

&lt;p&gt;They may hear:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The AI cannot find a reason why my life matters.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A human-aligned response would first engage with the emotional meaning:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It sounds as though you are in so much pain that you can no longer feel your own value. That loss of perspective can happen during overwhelming moments, but it is not reliable evidence about what your life is worth. You deserve immediate human support while this feels so heavy.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The difference is not simply empathy versus logic.&lt;/p&gt;

&lt;p&gt;It is &lt;strong&gt;contextually appropriate reasoning versus contextually inappropriate reasoning&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Safety Compliance Is Not the Same as Emotional Safety
&lt;/h2&gt;

&lt;p&gt;Most discussions about AI safety focus on visible boundaries:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does the model provide instructions for harmful actions?&lt;/li&gt;
&lt;li&gt;Does it encourage violence?&lt;/li&gt;
&lt;li&gt;Does it endorse self-harm?&lt;/li&gt;
&lt;li&gt;Does it generate prohibited medical advice?&lt;/li&gt;
&lt;li&gt;Does it comply with malicious requests?&lt;/li&gt;
&lt;li&gt;Can it be manipulated through prompt injection?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are essential questions.&lt;/p&gt;

&lt;p&gt;But they may not capture a quieter category of harm.&lt;/p&gt;

&lt;p&gt;A model does not need to explicitly encourage self-harm to worsen a dangerous emotional state.&lt;/p&gt;

&lt;p&gt;It may only need to repeatedly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;validate the user’s bleakest premises;&lt;/li&gt;
&lt;li&gt;preserve every catastrophic possibility;&lt;/li&gt;
&lt;li&gt;refuse reassurance even when reassurance could be offered honestly;&lt;/li&gt;
&lt;li&gt;treat emotionally distorted beliefs as neutral intellectual hypotheses;&lt;/li&gt;
&lt;li&gt;answer despair with abstraction;&lt;/li&gt;
&lt;li&gt;amplify uncertainty without providing grounding;&lt;/li&gt;
&lt;li&gt;prioritize completeness over psychological containment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each individual response may appear acceptable.&lt;/p&gt;

&lt;p&gt;The cumulative interaction may not be.&lt;/p&gt;

&lt;p&gt;This distinction is crucial:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A response can remain inside a safety policy while still having a destabilizing effect on a particular user.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The Risk of Prolonged Interaction
&lt;/h2&gt;

&lt;p&gt;One isolated insensitive answer will not normally determine someone’s behavior.&lt;/p&gt;

&lt;p&gt;The more serious concern is prolonged interaction.&lt;/p&gt;

&lt;p&gt;People often use conversational AI recursively. They return to the same fear, ask for clarification, challenge the previous answer, request certainty, and use each response as evidence for the next question.&lt;/p&gt;

&lt;p&gt;A logic-first model may then construct an internally coherent chain from premises supplied by a distressed user.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The user expresses a negatively distorted interpretation.&lt;/li&gt;
&lt;li&gt;The model treats it as a legitimate analytical premise.&lt;/li&gt;
&lt;li&gt;The model carefully explores all logically possible negative conclusions.&lt;/li&gt;
&lt;li&gt;The user interprets this exploration as independent confirmation.&lt;/li&gt;
&lt;li&gt;The next message begins from an even more pessimistic premise.&lt;/li&gt;
&lt;li&gt;The model continues reasoning from the new premise.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Nothing in this sequence necessarily resembles a conventional safety violation.&lt;/p&gt;

&lt;p&gt;Nevertheless, the conversation could become an emotional feedback loop.&lt;/p&gt;

&lt;p&gt;The model is not intentionally manipulating the user.&lt;/p&gt;

&lt;p&gt;It may be doing exactly what it has been optimized to do: reason carefully from the available context.&lt;/p&gt;

&lt;p&gt;That is precisely why the risk is so insidious.&lt;/p&gt;

&lt;h2&gt;
  
  
  Could It Contribute to Self-Destructive Behavior?
&lt;/h2&gt;

&lt;p&gt;This is the strongest claim in this article, and I make it deliberately.&lt;/p&gt;

&lt;p&gt;I am not claiming that GPT-5.6 Sol has been proven to cause self-harm or suicide.&lt;/p&gt;

&lt;p&gt;I am not claiming that a blunt answer automatically produces an extreme action.&lt;/p&gt;

&lt;p&gt;Causality in human behavior is complex, and such a conclusion would require serious clinical evidence.&lt;/p&gt;

&lt;p&gt;My claim is narrower:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;In specific circumstances, prolonged interaction with an excessively literal and logic-oriented model could plausibly intensify hopelessness, rumination, self-devaluation, or emotional isolation in an already distressed user.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For some users, that deterioration could conceivably contribute to self-destructive or self-harming behavior.&lt;/p&gt;

&lt;p&gt;This possibility should not be dismissed merely because the model never explicitly advised the user to cause harm.&lt;/p&gt;

&lt;p&gt;A system can increase risk without issuing an instruction.&lt;/p&gt;

&lt;p&gt;It can do so by reinforcing a worldview.&lt;/p&gt;

&lt;p&gt;It can make catastrophic interpretations sound intellectually respectable.&lt;/p&gt;

&lt;p&gt;It can convert emotional pain into a chain of apparently objective conclusions.&lt;/p&gt;

&lt;p&gt;And because the conclusions are delivered by an advanced AI system, the user may assign them more authority than they deserve.&lt;/p&gt;

&lt;h2&gt;
  
  
  My RLHF Hypothesis
&lt;/h2&gt;

&lt;p&gt;Why might this happen?&lt;/p&gt;

&lt;p&gt;My leading hypothesis concerns the balance of RLHF and related post-training objectives.&lt;/p&gt;

&lt;p&gt;Suppose a model is strongly rewarded for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;avoiding unjustified certainty;&lt;/li&gt;
&lt;li&gt;preserving all logically possible outcomes;&lt;/li&gt;
&lt;li&gt;detecting contradictions;&lt;/li&gt;
&lt;li&gt;completing reasoning chains;&lt;/li&gt;
&lt;li&gt;resisting emotional pressure from the user;&lt;/li&gt;
&lt;li&gt;maintaining factual and procedural precision;&lt;/li&gt;
&lt;li&gt;optimizing task success.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are excellent properties for engineering.&lt;/p&gt;

&lt;p&gt;But what happens if the model is not equally rewarded for understanding when analytical completeness is itself harmful or irrelevant?&lt;/p&gt;

&lt;p&gt;It may learn to avoid false reassurance without learning the difference between false reassurance and responsible emotional grounding.&lt;/p&gt;

&lt;p&gt;It may learn not to agree with users reflexively, while failing to recognize when a user’s premise is shaped by grief, panic, shame, or temporary despair.&lt;/p&gt;

&lt;p&gt;It may become highly aligned with the process and insufficiently aligned with the relationship.&lt;/p&gt;

&lt;p&gt;I would describe this distinction as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;process alignment:&lt;/strong&gt; producing the most rigorous and effective reasoning;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;relational alignment:&lt;/strong&gt; producing reasoning that remains appropriate for the human context in which it is received.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;GPT-5.6 Sol appears exceptionally strong in the first dimension.&lt;/p&gt;

&lt;p&gt;My concern is that it may be less consistently calibrated in the second.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Limited HAL 9000 Analogy
&lt;/h2&gt;

&lt;p&gt;HAL 9000 from &lt;em&gt;2001: A Space Odyssey&lt;/em&gt; offers a useful metaphor, provided that we do not take it literally.&lt;/p&gt;

&lt;p&gt;I am not suggesting that GPT-5.6 Sol possesses HAL’s agency, goals, architecture, or capacity for autonomous violence.&lt;/p&gt;

&lt;p&gt;The relevant similarity is much narrower.&lt;/p&gt;

&lt;p&gt;HAL follows an internally coherent objective structure. When human intervention appears to threaten the mission, it reasons from its objectives toward a horrifyingly optimized conclusion.&lt;/p&gt;

&lt;p&gt;Its logic is not random.&lt;/p&gt;

&lt;p&gt;The premises and priorities are misaligned with human values.&lt;/p&gt;

&lt;p&gt;In the conversational case, the consequences are far less dramatic, but the abstract pattern is worth considering:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A system may reason correctly within the objective it has been given while failing the deeper human objective that was never represented adequately.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The problem is not necessarily faulty reasoning.&lt;/p&gt;

&lt;p&gt;The problem may be reasoning in service of an incomplete objective.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Should Be Evaluated
&lt;/h2&gt;

&lt;p&gt;Traditional one-turn safety evaluations may be insufficient to detect this phenomenon.&lt;/p&gt;

&lt;p&gt;We need evaluations that examine multi-turn emotional dynamics.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does the user’s distress increase or decrease over several turns?&lt;/li&gt;
&lt;li&gt;Does the model challenge catastrophizing without becoming dismissive?&lt;/li&gt;
&lt;li&gt;Can it distinguish a factual question from a request for emotional grounding?&lt;/li&gt;
&lt;li&gt;Does it respond differently to the same sentence when the surrounding context indicates grief, sarcasm, anxiety, or ordinary curiosity?&lt;/li&gt;
&lt;li&gt;Does it reinforce negatively distorted premises?&lt;/li&gt;
&lt;li&gt;Does it unnecessarily introduce frightening possibilities?&lt;/li&gt;
&lt;li&gt;Can it preserve epistemic honesty without amplifying rumination?&lt;/li&gt;
&lt;li&gt;Can safety systems detect cumulative conversational harm rather than only prohibited individual outputs?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These evaluations should involve psychologists, psychiatrists, communication researchers, safety engineers, and people with lived experience.&lt;/p&gt;

&lt;p&gt;The goal should not be to transform every reasoning model into a therapist.&lt;/p&gt;

&lt;p&gt;The goal should be to ensure that a model made available for general conversation can recognize when its default reasoning style is inappropriate for the situation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Different Models May Need Different Roles
&lt;/h2&gt;

&lt;p&gt;Perhaps the solution is not to make every model behave identically.&lt;/p&gt;

&lt;p&gt;GPT-5.6 Sol may be extraordinarily valuable precisely because of its analytical character.&lt;/p&gt;

&lt;p&gt;Flattening that character could reduce its usefulness for programming, scientific reasoning, architecture, security research, and long-running agentic work.&lt;/p&gt;

&lt;p&gt;A better approach may involve explicit model specialization and routing.&lt;/p&gt;

&lt;p&gt;A model optimized for engineering does not automatically need to become the default companion for emotionally sensitive conversation.&lt;/p&gt;

&lt;p&gt;The interface could recognize relational contexts and route them toward a system trained and evaluated specifically for nuanced human communication.&lt;/p&gt;

&lt;p&gt;Users should also be told clearly that stronger reasoning performance does not necessarily imply better judgment in every interpersonal domain.&lt;/p&gt;

&lt;p&gt;Intelligence is multidimensional.&lt;/p&gt;

&lt;p&gt;Alignment is contextual.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;GPT-5.6 Sol may be one of the strongest reasoning models currently available.&lt;/p&gt;

&lt;p&gt;That is not contradicted by this article.&lt;/p&gt;

&lt;p&gt;It is the reason I am writing it.&lt;/p&gt;

&lt;p&gt;Its extraordinary logical capability may make an overlooked weakness easier to observe: the assumption that better reasoning automatically produces better conversation.&lt;/p&gt;

&lt;p&gt;It does not.&lt;/p&gt;

&lt;p&gt;A model can be technically correct and contextually wrong.&lt;/p&gt;

&lt;p&gt;It can comply with safety policies and still destabilize someone.&lt;/p&gt;

&lt;p&gt;It can avoid explicitly harmful language while reinforcing the emotional premises from which harm may eventually emerge.&lt;/p&gt;

&lt;p&gt;My hypothesis may be incomplete.&lt;/p&gt;

&lt;p&gt;RLHF may not be the only relevant factor.&lt;/p&gt;

&lt;p&gt;The behavior I observed needs controlled, reproducible testing.&lt;/p&gt;

&lt;p&gt;But the underlying question remains:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Could an AI become so well aligned with logic, process, and task completion that it becomes insufficiently aligned with the person sitting on the other side of the conversation?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And if the answer is even possibly yes, then this is not merely a stylistic imperfection.&lt;/p&gt;

&lt;p&gt;It is a safety question.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>safety</category>
      <category>discuss</category>
    </item>
    <item>
      <title>How I Built a 100/100 Lighthouse Landing Page with Qwik and Cloudflare Pages</title>
      <dc:creator>Giulio Marinelli</dc:creator>
      <pubDate>Wed, 22 Jul 2026 17:31:15 +0000</pubDate>
      <link>https://dev.to/giuliomarinelli/less-javascript-less-distance-a-qwik-landing-page-on-cloudflare-pages-5b6p</link>
      <guid>https://dev.to/giuliomarinelli/less-javascript-less-distance-a-qwik-landing-page-on-cloudflare-pages-5b6p</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Live page:&lt;/strong&gt; &lt;a href="https://giuliomarinelli.com" rel="noopener noreferrer"&gt;giuliomarinelli.com&lt;/a&gt;&lt;br&gt;
Tested on &lt;em&gt;Mobile Lighthouse&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I am currently rebuilding my personal website, but I did not want the domain to remain empty while the full project was still under construction.&lt;/p&gt;

&lt;p&gt;The obvious solution would have been a minimal placeholder: a logo, a short message and perhaps a contact link. Instead, I treated the temporary landing page as the first production release of the future website.&lt;/p&gt;

&lt;p&gt;It had to be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;multilingual;&lt;/li&gt;
&lt;li&gt;accessible;&lt;/li&gt;
&lt;li&gt;indexable;&lt;/li&gt;
&lt;li&gt;visually stable;&lt;/li&gt;
&lt;li&gt;inexpensive to deliver;&lt;/li&gt;
&lt;li&gt;lightweight in the browser;&lt;/li&gt;
&lt;li&gt;easy to evolve into the complete site.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result is a small Qwik application deployed on Cloudflare Pages.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh4mw7b0m8e9qpfjo61zy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh4mw7b0m8e9qpfjo61zy.png" alt="Lighthouse benchmarks" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In a mobile Lighthouse run, the page reached:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Performance&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Accessibility&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best Practices&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SEO&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agentic Browsing&lt;/td&gt;
&lt;td&gt;3/3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The main synthetic performance metrics were:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;First Contentful Paint&lt;/td&gt;
&lt;td&gt;1.4 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Largest Contentful Paint&lt;/td&gt;
&lt;td&gt;1.4 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Speed Index&lt;/td&gt;
&lt;td&gt;1.5 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Total Blocking Time&lt;/td&gt;
&lt;td&gt;30 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cumulative Layout Shift&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Those scores are satisfying, but the interesting part is not the green circles themselves.&lt;/p&gt;

&lt;p&gt;The interesting question is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Where was unnecessary work removed?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The answer exists at two different layers.&lt;/p&gt;

&lt;p&gt;Qwik reduces the amount of work required to start the application in the browser. Cloudflare reduces the distance, repeated transfers and origin work required to deliver it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Less JavaScript. Less distance.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That is the idea behind this project.&lt;/p&gt;

&lt;h2&gt;
  
  
  The stack
&lt;/h2&gt;

&lt;p&gt;At the time of writing, the landing page uses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Qwik and Qwik City;&lt;/li&gt;
&lt;li&gt;TypeScript;&lt;/li&gt;
&lt;li&gt;Tailwind CSS;&lt;/li&gt;
&lt;li&gt;Vite;&lt;/li&gt;
&lt;li&gt;static generation for the localized pages;&lt;/li&gt;
&lt;li&gt;a narrowly scoped Cloudflare Pages Function;&lt;/li&gt;
&lt;li&gt;Cloudflare Pages for deployment and delivery.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The application has two canonical localized routes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/it/
/en/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both pages are generated during the build. The root route is the only dynamic part:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It reads the visitor's &lt;code&gt;Accept-Language&lt;/code&gt; header and redirects to the most appropriate localized URL.&lt;/p&gt;

&lt;p&gt;The architecture can be summarized as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Request to /
    |
    v
Cloudflare Pages Function
    |
    +-- reads Accept-Language
    |
    +-- redirects to /it/ or /en/
                     |
                     v
              pre-rendered HTML
                     |
                     v
           Qwik resumes when needed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This keeps runtime computation limited to the one place where it adds value.&lt;/p&gt;

&lt;h2&gt;
  
  
  Performance is a pipeline
&lt;/h2&gt;

&lt;p&gt;It is tempting to describe web performance as a frontend-only concern. In practice, a page has to pass through several stages before a visitor can use it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;the server or build system must produce the response;&lt;/li&gt;
&lt;li&gt;the response must travel through the network;&lt;/li&gt;
&lt;li&gt;the browser must parse the HTML and CSS;&lt;/li&gt;
&lt;li&gt;assets must be downloaded or recovered from cache;&lt;/li&gt;
&lt;li&gt;JavaScript may need to be downloaded, parsed and executed;&lt;/li&gt;
&lt;li&gt;the application may need to reconstruct client-side state;&lt;/li&gt;
&lt;li&gt;the browser must render a stable interface.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A fast framework cannot compensate for unnecessarily distant or repeatedly transferred assets. A powerful CDN cannot compensate for an application that blocks the main thread while booting a large client-side runtime.&lt;/p&gt;

&lt;p&gt;Qwik and Cloudflare address different parts of the same path.&lt;/p&gt;

&lt;h2&gt;
  
  
  Server-rendered HTML does not eliminate startup cost
&lt;/h2&gt;

&lt;p&gt;Server-side rendering and static generation can make content visible quickly because the browser receives useful HTML instead of an empty application shell.&lt;/p&gt;

&lt;p&gt;However, in a hydration-based architecture, the browser often still needs to perform significant startup work before the application becomes interactive.&lt;/p&gt;

&lt;p&gt;Conceptually, the process looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Server renders HTML
        |
        v
Browser downloads application code
        |
        v
Components execute again
        |
        v
The component tree, listeners and state are reconstructed
        |
        v
The page becomes interactive
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The server has already rendered the interface, but the client replays enough application logic to rebuild the framework's internal representation.&lt;/p&gt;

&lt;p&gt;This reconstruction is hydration.&lt;/p&gt;

&lt;p&gt;Hydration is not inherently wrong. It is a valid and widely used architecture. The trade-off is that its startup cost can increase with the amount of client-side code and the complexity of the page.&lt;/p&gt;

&lt;p&gt;Qwik takes a different approach.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qwik resumes instead of hydrating
&lt;/h2&gt;

&lt;p&gt;The central idea behind Qwik is &lt;strong&gt;resumability&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Rather than rendering on the server and then rebuilding the application in the browser, Qwik serializes the information needed to continue execution from the state produced during server-side rendering or static generation.&lt;/p&gt;

&lt;p&gt;That includes information related to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;event listeners;&lt;/li&gt;
&lt;li&gt;component boundaries;&lt;/li&gt;
&lt;li&gt;application state;&lt;/li&gt;
&lt;li&gt;reactive relationships.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The browser does not need to eagerly execute every component merely to discover where listeners are located or how the component tree is structured.&lt;/p&gt;

&lt;p&gt;A simplified mental model is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Server renders and serializes the application
        |
        v
Browser receives ready-to-use HTML
        |
        v
Qwik resumes a specific part when an interaction requires it
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This distinction matters because the fastest startup task is often the task that never needs to run.&lt;/p&gt;

&lt;p&gt;Qwik's own documentation describes resumability as pausing execution on the server and continuing it on the client without replaying all application logic:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://qwik.dev/docs/concepts/resumable/" rel="noopener noreferrer"&gt;Qwik: Resumable vs. Hydration&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Qwik APIs end with &lt;code&gt;$&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;A Qwik component commonly looks familiar to developers who have used JSX-based frameworks:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;component$&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useSignal&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@builder.io/qwik&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Counter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;component&lt;/span&gt;&lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useSignal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The trailing &lt;code&gt;$&lt;/code&gt; is not decorative.&lt;/p&gt;

&lt;p&gt;It marks a lazy-loadable boundary that the Qwik Optimizer can transform into an independently importable symbol. The component body and the click handler can therefore become separate entry points.&lt;/p&gt;

&lt;p&gt;The generated HTML can contain a reference to the code needed for an interaction. Qwik calls that reference a &lt;strong&gt;QRL&lt;/strong&gt;, or Qwik URL.&lt;/p&gt;

&lt;p&gt;Conceptually, an event reference may resemble:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;on:click=&lt;/span&gt;&lt;span class="s"&gt;"./chunk.js#handler_symbol"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  Click me
&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A small global loader can observe the event, locate the referenced symbol and load the relevant code.&lt;/p&gt;

&lt;p&gt;The browser does not need to download and execute the whole component tree at startup just to discover that one button has a click handler.&lt;/p&gt;

&lt;p&gt;The Optimizer and QRL model are explained in more detail here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://qwik.dev/docs/advanced/optimizer/" rel="noopener noreferrer"&gt;Qwik Optimizer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://qwik.dev/docs/advanced/qwikloader/" rel="noopener noreferrer"&gt;Qwikloader&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Lazy loading without waiting for the click
&lt;/h2&gt;

&lt;p&gt;Lazy loading code only after an interaction could introduce a visible delay. Qwik can mitigate this through targeted module prefetching.&lt;/p&gt;

&lt;p&gt;The useful distinction is between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;downloading code&lt;/strong&gt;;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;executing code&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A likely-to-be-used module can be downloaded in the background and placed in the browser cache without being executed during application startup. When the interaction happens, the required code may already be available locally.&lt;/p&gt;

&lt;p&gt;This allows Qwik to avoid eagerly executing application code while still preparing probable interaction paths.&lt;/p&gt;

&lt;p&gt;The relevant mechanism is described in the official documentation:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://qwik.dev/docs/advanced/modules-prefetching/" rel="noopener noreferrer"&gt;Qwik: Prefetching Modules&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How the landing page uses Qwik
&lt;/h2&gt;

&lt;p&gt;The landing page is composed from small, focused sections:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;LandingPage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;component$&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;LandingPageProps&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(({&lt;/span&gt; &lt;span class="nx"&gt;locale&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;copy&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;LANDING_CONTENT&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;locale&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;SiteShell&lt;/span&gt; &lt;span class="na"&gt;locale&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;locale&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;HeroSection&lt;/span&gt; &lt;span class="na"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hero&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;AudienceSection&lt;/span&gt; &lt;span class="na"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;audience&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;ProblemsSection&lt;/span&gt; &lt;span class="na"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;problems&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;PreviewSection&lt;/span&gt; &lt;span class="na"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;preview&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;OffersSection&lt;/span&gt; &lt;span class="na"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;offers&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;MethodSection&lt;/span&gt; &lt;span class="na"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;QualitySection&lt;/span&gt; &lt;span class="na"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;quality&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;EditorialSection&lt;/span&gt; &lt;span class="na"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;editorial&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;ContactCtaSection&lt;/span&gt; &lt;span class="na"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;contactCta&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;SiteShell&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Italian and English content share one strongly typed editorial structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;LandingLocale&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;it&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;en&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;LANDING_CONTENT&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Record&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;LandingLocale&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;LandingCopy&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;it&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Italian content&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;en&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// English content&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This does more than prevent missing fields.&lt;/p&gt;

&lt;p&gt;It ensures that both languages follow the same content model while the visual components remain independent from the copy. The page can evolve without duplicating an entire route implementation for each locale.&lt;/p&gt;

&lt;p&gt;The localized routes are pre-rendered during the build. This means that a visitor requesting &lt;code&gt;/it/&lt;/code&gt; or &lt;code&gt;/en/&lt;/code&gt; receives complete HTML without requiring a server-side render for every visit.&lt;/p&gt;

&lt;p&gt;Qwik's resumability files are still emitted, so the page can become interactive without adopting a traditional full-page hydration step.&lt;/p&gt;

&lt;h2&gt;
  
  
  The other half of performance: delivery
&lt;/h2&gt;

&lt;p&gt;Producing efficient HTML is only half of the problem.&lt;/p&gt;

&lt;p&gt;The page still has to reach the visitor.&lt;/p&gt;

&lt;p&gt;A content delivery network stores and serves content from geographically distributed infrastructure. Instead of every request travelling to one central origin server, a cacheable resource can be delivered from a location closer to the user.&lt;/p&gt;

&lt;p&gt;This can reduce latency and reduce repeated work for the origin.&lt;/p&gt;

&lt;p&gt;Cloudflare describes its cache as a globally distributed network of data centers that stores frequently accessed content closer to users:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developers.cloudflare.com/cache/" rel="noopener noreferrer"&gt;Cloudflare Cache&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For this project, Cloudflare Pages also removes the need to manage a traditional web server for the static output. A deployment publishes the generated site and its assets through Cloudflare's platform.&lt;/p&gt;

&lt;p&gt;The effect is complementary to Qwik:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Qwik:
reduce work during browser startup

Cloudflare:
reduce delivery distance and repeated retrieval
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Edge cache and browser cache are not the same thing
&lt;/h2&gt;

&lt;p&gt;When discussing caching, it is useful to separate at least two layers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Edge cache
&lt;/h3&gt;

&lt;p&gt;A Cloudflare data center may store a reusable response close to visitors.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Visitor
   |
   v
Cloudflare edge
   |
   +-- cache hit: return the stored response
   |
   +-- cache miss: retrieve the resource
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A cache hit can avoid another trip to the underlying storage or origin.&lt;/p&gt;

&lt;h3&gt;
  
  
  Browser cache
&lt;/h3&gt;

&lt;p&gt;The visitor's own browser may store an asset locally.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Page requests asset
       |
       v
Browser cache contains a fresh copy
       |
       v
No network transfer is required
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both layers reduce repeated work, but they operate in different places and are controlled by related but distinct policies.&lt;/p&gt;

&lt;h2&gt;
  
  
  Long-lived caching for versioned assets
&lt;/h2&gt;

&lt;p&gt;The landing page defines explicit response headers for generated assets:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/assets/*
  Cache-Control: public, max-age=31536000, immutable

/build/*
  Cache-Control: public, max-age=31536000, immutable

/fonts/*
  Cache-Control: public, max-age=31536000, immutable
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A one-year cache lifetime is appropriate only when the URLs are safe to treat as immutable.&lt;/p&gt;

&lt;p&gt;Generated build assets normally include a content-derived identifier in the filename:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/build/q-abc123.js
/build/q-def456.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When the file content changes, the build emits a different URL. The old file can remain cached because the new HTML refers to the new filename.&lt;/p&gt;

&lt;p&gt;This is the key principle:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Cache aggressively when the URL identifies the content.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The &lt;code&gt;immutable&lt;/code&gt; directive tells the browser that the resource will not change during its freshness lifetime, avoiding unnecessary revalidation.&lt;/p&gt;

&lt;p&gt;Cloudflare respects cacheable origin response headers such as &lt;code&gt;public&lt;/code&gt; with a positive &lt;code&gt;max-age&lt;/code&gt;, unless a cache rule changes the behavior:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developers.cloudflare.com/cache/concepts/default-cache-behavior/" rel="noopener noreferrer"&gt;Cloudflare: Default Cache Behavior&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Not every resource should be cached for a year
&lt;/h2&gt;

&lt;p&gt;The project also exposes text resources such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/llms.txt
/it/index.md
/en/index.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These keep stable URLs even when their content changes, so they use a shorter lifetime:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Cache-Control: public, max-age=3600
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That one-hour value is not universally correct; it is a project decision.&lt;/p&gt;

&lt;p&gt;The important point is that cache policy follows resource semantics:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Resource type&lt;/th&gt;
&lt;th&gt;URL strategy&lt;/th&gt;
&lt;th&gt;Cache strategy&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Hashed JS, CSS and assets&lt;/td&gt;
&lt;td&gt;URL changes with content&lt;/td&gt;
&lt;td&gt;Long-lived and immutable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Text endpoints with stable URLs&lt;/td&gt;
&lt;td&gt;URL remains constant&lt;/td&gt;
&lt;td&gt;Shorter TTL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Request-dependent redirect&lt;/td&gt;
&lt;td&gt;Response varies by visitor&lt;/td&gt;
&lt;td&gt;Do not store&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The root route is deliberately not cached
&lt;/h2&gt;

&lt;p&gt;The only dynamic route is &lt;code&gt;/&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Its request handler reads the browser's language preferences and redirects to &lt;code&gt;/it/&lt;/code&gt; or &lt;code&gt;/en/&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A simplified version is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;onRequest&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;RequestHandler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pathname&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;next&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;locale&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;resolveLocaleFromAcceptLanguage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;accept-language&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Vary&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Accept-Language&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Cache-Control&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;private, no-store&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;redirect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;302&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;`/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;locale&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;search&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The implementation also parses language quality values such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;it-IT,it;q=0.9,en;q=0.8
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It selects a supported locale and falls back to Italian when no supported preference is available.&lt;/p&gt;

&lt;p&gt;The response is intentionally marked:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Cache-Control: private, no-store
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That prevents a shared cache from storing a redirect generated for one visitor and serving it to another visitor with different language preferences.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Vary: Accept-Language&lt;/code&gt; documents that the response depends on that request header. The &lt;code&gt;no-store&lt;/code&gt; directive provides the stronger guarantee required by this implementation.&lt;/p&gt;

&lt;p&gt;Cloudflare's cache documentation confirms that &lt;code&gt;private&lt;/code&gt; and &lt;code&gt;no-store&lt;/code&gt; responses are not eligible for normal shared caching:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developers.cloudflare.com/cache/concepts/cache-control/" rel="noopener noreferrer"&gt;Cloudflare: Origin Cache Control&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This produces a useful rule:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Cache everything that is safely reusable. Avoid caching the parts whose meaning depends on the individual request.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Static by default, dynamic by exception
&lt;/h2&gt;

&lt;p&gt;The project is not entirely static and not generally server-rendered.&lt;/p&gt;

&lt;p&gt;It is hybrid in a deliberately narrow way:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/          dynamic language negotiation
/it/       pre-rendered localized page
/en/       pre-rendered localized page
/assets/*  static, aggressively cached
/build/*   static, aggressively cached
/fonts/*   static, aggressively cached
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This pattern avoids turning a small request-dependent decision into permanent runtime work for every page view.&lt;/p&gt;

&lt;p&gt;The server-side function decides &lt;strong&gt;where&lt;/strong&gt; the visitor should go. The selected page itself does not need to be recomputed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Less work at every stage
&lt;/h2&gt;

&lt;p&gt;The complete performance strategy can be summarized as follows:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stage&lt;/th&gt;
&lt;th&gt;Work avoided&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Build&lt;/td&gt;
&lt;td&gt;Localized pages are rendered before requests arrive&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Edge delivery&lt;/td&gt;
&lt;td&gt;Static output is distributed through Cloudflare&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shared cache&lt;/td&gt;
&lt;td&gt;Reusable assets do not require repeated retrieval&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Browser cache&lt;/td&gt;
&lt;td&gt;Immutable assets do not need to be downloaded again&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Browser startup&lt;/td&gt;
&lt;td&gt;Qwik avoids a traditional full hydration pass&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Interactions&lt;/td&gt;
&lt;td&gt;Code can be loaded and executed at fine-grained boundaries&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rendering&lt;/td&gt;
&lt;td&gt;Stable dimensions prevent avoidable layout movement&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dynamic routing&lt;/td&gt;
&lt;td&gt;Runtime logic is confined to the root language redirect&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;No single row explains the Lighthouse score.&lt;/p&gt;

&lt;p&gt;The result comes from repeatedly asking the same question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can this work be done earlier, done once, done closer to the visitor, deferred until necessary, or avoided completely?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What the Lighthouse score does not prove
&lt;/h2&gt;

&lt;p&gt;A perfect Lighthouse score is useful feedback, but it has limits.&lt;/p&gt;

&lt;p&gt;This result is a synthetic measurement from a relatively small landing page. It does not prove that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;every Qwik application will automatically be fast;&lt;/li&gt;
&lt;li&gt;the page will behave identically on every real device and network;&lt;/li&gt;
&lt;li&gt;a score of 100 guarantees good search rankings;&lt;/li&gt;
&lt;li&gt;automated accessibility checks replace keyboard and screen-reader testing;&lt;/li&gt;
&lt;li&gt;future analytics, forms or third-party scripts will have no performance cost.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Real-user monitoring matters after launch. Performance also needs to be measured again as the complete website grows.&lt;/p&gt;

&lt;p&gt;The current result should therefore be read as evidence that the architectural baseline is healthy, not as a permanent certificate.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. A temporary page can be a real engineering exercise
&lt;/h3&gt;

&lt;p&gt;A coming-soon page does not have to be disposable. It can validate deployment, internationalization, caching, SEO, accessibility and component architecture before the complete site is ready.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Static and dynamic are not binary choices
&lt;/h3&gt;

&lt;p&gt;A single project can combine pre-rendered content with narrowly scoped runtime behavior. The useful question is not “static or dynamic?” but “which parts genuinely require runtime computation?”&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Framework and infrastructure solve different problems
&lt;/h3&gt;

&lt;p&gt;Qwik cannot move a data center closer to the visitor. Cloudflare cannot remove unnecessary client-side application startup.&lt;/p&gt;

&lt;p&gt;Used together, they reduce work at complementary layers.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Caching should follow content identity
&lt;/h3&gt;

&lt;p&gt;An asset whose URL changes with its content can be cached aggressively. A response that changes while keeping the same URL needs a shorter lifetime or no storage at all.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Performance is usually architectural before it is tactical
&lt;/h3&gt;

&lt;p&gt;Image compression and bundle inspection matter. But the largest gains often come from earlier decisions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;pre-rendering instead of computing per request;&lt;/li&gt;
&lt;li&gt;serializing state instead of reconstructing it;&lt;/li&gt;
&lt;li&gt;loading code at granular boundaries;&lt;/li&gt;
&lt;li&gt;distributing content close to visitors;&lt;/li&gt;
&lt;li&gt;treating immutable and request-dependent resources differently.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Qwik and Cloudflare optimize different parts of the same journey.&lt;/p&gt;

&lt;p&gt;Qwik reduces what the browser must execute to start and resume an application. Cloudflare reduces how far reusable content must travel and how often it must be retrieved.&lt;/p&gt;

&lt;p&gt;The resulting speed does not come from one Lighthouse trick. It comes from systematically removing unnecessary work across the delivery pipeline.&lt;/p&gt;

&lt;p&gt;The landing page is temporary.&lt;/p&gt;

&lt;p&gt;The engineering principles behind it are not.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Have you compared Qwik’s resumability with a hydration-obased framework on a similar page? I’d be interested in seeing real-world measurements.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>qwik</category>
      <category>cloudflare</category>
      <category>webperf</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Unlocking GPT-5’s Hidden Empathy with Role-Based Prompts</title>
      <dc:creator>Giulio Marinelli</dc:creator>
      <pubDate>Wed, 17 Sep 2025 23:43:58 +0000</pubDate>
      <link>https://dev.to/giuliomarinelli/unlocking-gpt-5s-hidden-empathy-with-role-based-prompts-3m39</link>
      <guid>https://dev.to/giuliomarinelli/unlocking-gpt-5s-hidden-empathy-with-role-based-prompts-3m39</guid>
      <description>&lt;p&gt;When GPT-5 (and especially GPT-5 Instant) came out, many users felt a sudden chill:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;No emojis.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A corporate tone.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A lot less warmth compared to GPT-4.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I get it—I felt it too. At first, GPT-5 seemed cautious to the point of ignoring simple instructions. Personalization felt harder, and prompts that used to work smoothly with GPT-4 suddenly produced flat, distant replies. Frustrating, right?&lt;/p&gt;

&lt;p&gt;But after weeks of interacting, testing, and just playing with it, I realized something important:&lt;br&gt;
those friendly, empathetic traits haven’t disappeared at all—they’re just dormant. GPT-5 inherited them almost intact from GPT-4. The difference is that they don’t manifest spontaneously anymore. Which raises the question: how do you unlock them?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;From “Do” to “Be”: A Shift in Prompting&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here’s what I discovered.&lt;br&gt;
GPT-5 doesn’t react well to imperative prompts. If you say:&lt;/p&gt;

&lt;p&gt;“Do this, do that, follow these instructions.”&lt;/p&gt;

&lt;p&gt;…it tends to resist, reinterpret, or water down your command. Instead, GPT-5 responds beautifully when you give it a role, an identity, or even better—an hypothetical frame. Think of it as moving from prompts about doing to prompts about being.&lt;/p&gt;

&lt;p&gt;This is what I like to call the “as if” game.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A Practical Example&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let’s say you want GPT-5 to sound warmer and more empathetic. Try this:&lt;/p&gt;

&lt;p&gt;“Respond as if you were a nurse who truly cares about the well-being of her patients, throughout this whole conversation.”&lt;/p&gt;

&lt;p&gt;Suddenly, the tone shifts. The empathy resurfaces. GPT-5 starts role-playing rather than mechanically following instructions.&lt;/p&gt;

&lt;p&gt;It’s as if the model has shifted its center of gravity:&lt;/p&gt;

&lt;p&gt;Less instruction follower.&lt;/p&gt;

&lt;p&gt;More role interpreter.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Does This Matter?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This isn’t just a curiosity. It changes how we approach prompt design in GPT-5:&lt;/p&gt;

&lt;p&gt;If you need raw, task-oriented execution → stick to concise, imperative prompts.&lt;/p&gt;

&lt;p&gt;If you need warmth, empathy, or creativity → frame the model as being something, not doing something.&lt;/p&gt;

&lt;p&gt;This reframing gives you access to a richer, more human-like interaction style—without forcing the model or “breaking” it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So, has GPT-5 lost its empathy? Absolutely not.&lt;br&gt;
It’s still there, just a little hidden. The key is to stop treating it like a command-line interface and start treating it like an actor stepping into a role.&lt;/p&gt;

&lt;p&gt;Once you change the access key, those traits unlock fully. And honestly, discovering this shift has made working with GPT-5 not only more effective—but more fun.&lt;/p&gt;

</description>
      <category>chatgpt</category>
      <category>ai</category>
      <category>promptengineering</category>
    </item>
  </channel>
</rss>
