<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/badweb.xsl"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bw="urn:badweb:pages">
  <soap:Header>
    <bw:Routes>0</bw:Routes>
    <bw:Transport>nc</bw:Transport>
    <bw:Concurrency>1</bw:Concurrency>
    <bw:BestViewedIn>Internet Explorer 6</bw:BestViewedIn>
  </soap:Header>
  <soap:Body>
    <bw:GetPageResponse>
      <bw:Subdomain>www</bw:Subdomain>
      <bw:Title>badweb dot net</bw:Title>
      <bw:Kind>index</bw:Kind>
      <bw:VisitorNumber>273</bw:VisitorNumber>
      <bw:Article>
<bw:Para>badweb.net is a blog about web patterns, turned on their head. Every article is correct. Every page it is served on is not.</bw:Para>
<bw:Para>There are no routes. The thing after the slash is read, discarded, and ignored. Content is chosen by the Host header and nothing else, so every page on this site is a subdomain. You may request /about, /about/, or /about/us/2026/final/FINAL2 and receive the same bytes.</bw:Para>
<bw:Para>There is no webserver. There is one netcat and one named pipe, which means exactly one of you is being served at this moment and the rest are waiting in the kernel backlog. If the page was slow, that was another visitor.</bw:Para>
<bw:Para>Nothing here is REST. The server speaks SOAP and the browser renders it with an XSLT stylesheet, so no HTML is ever sent over the wire. View source and you will find an envelope.</bw:Para>
<bw:Para>The database is a CSV file. Rows are assembled by a shell script that joins fields with commas and escapes nothing, so a comma in your input moves your message into the timestamp column. This is documented behaviour.</bw:Para>
<bw:Para>Navigation is keyboard only. Clicking a link calls preventDefault and returns false. Press TAB until a link is outlined, then press ENTER.</bw:Para>
      </bw:Article>
      <bw:Index>
        <bw:Page sub="www">badweb dot net</bw:Page>
        <bw:Page sub="contrast">Choosing Accessible Colour Contrast</bw:Page>
        <bw:Page sub="api">Why REST Won And What It Replaced</bw:Page>
        <bw:Page sub="seo">Writing Crawlable Semantic HTML</bw:Page>
        <bw:Page sub="ux">Progressive Disclosure And Information Hierarchy</bw:Page>
        <bw:Page sub="security">Security: Injection and Cross-Site Scripting</bw:Page>
        <bw:Page sub="guestbook">Sign The Guestbook</bw:Page>
      </bw:Index>
    </bw:GetPageResponse>
  </soap:Body>
</soap:Envelope>
