Second-Generation Mobile Weather Pages: XHTML-MP versus WML

Why Cumulus sites kept /wap2.php beside /wap.php: XHTML Mobile Profile and early smartphone CSS versus WML, plus viewport and accessibility.

Back to Cumulus weather software guides

/wap2.php exists because WAP 2 did not delete WAP 1. Feature phones that only understood Wireless Markup Language kept calling /wap.php. Newer handsets could render an XHTML document with a subset of CSS. Station operators needed a second URL so bookmarks and gateways did not have to guess. This article is that split: XHTML Mobile Profile and early smartphone CSS versus WML, why two addresses were honest, and what accessibility and viewport rules still apply to a small-screen Cumulus observation.

It is not a clone of serving a deck (negotiation and completeness) and not a clone of the WAP project (why feature-phone publishing existed). Here the subject is the second generation of markup on the same observations.

Historical context

The WAP Forum’s XHTML Mobile Profile defined an XHTML document type for resource-constrained clients: phones, PDAs, pagers—devices that did not implement full desktop XHTML (OMA XHTML Mobile Profile 1.3, last checked 13 August 2026). WAP 2 authoring moved toward that profile (and WCSS). WML remained in the world as a deployed language; later WML2 work was framed as compatibility, not as the preferred new authoring language.

Cumulus sites therefore accumulated two mobile bookmarks. /wap.php stayed the WML deck. /wap2.php became the XHTML-MP (and, later, “simple HTML plus CSS”) page. TNET does not rehost either script. The URL pair is the historical evidence that markup generations are not drop-in replacements when the installed base is mixed.

Why two URLs instead of one clever script

A single endpoint can negotiate Accept and emit WML or XHTML. Many did. Two public URLs still made sense:

Bookmarks are sticky. A phone whose gateway bookmarked /wap.php as text/vnd.wap.wml would break if that URL started returning application/xhtml+xml without a fallback. Keeping /wap.php stable protected the installed base.

Gateways cached by URL. A shared cache key of /wap.php that sometimes held WML and sometimes XHTML produced random failures that looked like “the weather site is down.” Distinct paths made cache behavior inspectable.

Testing. Operators could open /wap2.php in a desktop browser more easily than WML. That convenience is not a scientific reason, but it reduced the chance that the XHTML page was only ever tested on one handset.

CSS is a second contract. WML had almost no layout language. XHTML-MP allowed internal or linked style. A stylesheet that assumed 320 px would harm a 128 px WAP 2 phone if it were also served to WML clients as “the mobile page.” Splitting URLs split the CSS risk.

Negotiation can still exist inside /wap2.php (XHTML-MP versus text/html). That is a family of related representations, not a revival of WML. WML stays on /wap.php.

What XHTML-MP changed for a weather page

Structure. You get headings, lists, and links that ordinary HTML authors already understand. You lose the WML card stack. “Now” versus “today’s extremes” becomes two pages or one scrolling page, not two cards in a deck. Scrolling is easier on later phones and worse on very short screens—hence viewport discipline below.

Media types. Conforming XHTML-MP user agents are specified to handle application/xhtml+xml and, for compatibility, application/vnd.wap.xhtml+xml. Sending text/html with an XHTML-MP doctype is a compatibility hack that some phones needed. Document which type you actually emit.

Style. Early WCSS / CSS subsets could set font size, margins, and colors. They could not be trusted to run a desktop layout. A Cumulus /wap2.php that linked the full station CSS (gauges, three-column tables, absolute positions) was a first-generation page wearing a second-generation URL. The second generation is a reduced stylesheet, not the desktop skin with display:none on the webcam.

Images. XHTML-MP clients were more likely to fetch a small PNG than WML clients. That does not make /wap2.php a banner host. If you include an avatar or a tiny thermometer, you still owe the numerals in text. Images fail; text is the observation.

Scripts. Later XHTML-MP versions added scripting modules. A weather observation page does not need them. Avoid JavaScript that fetches a second packet; the page should be complete in the HTML Cumulus or PHP already bound.

Viewport and accessibility

A second-generation mobile page is where viewport and accessibility become first-class, because CSS can now break the observation.

Viewport. Desktop-width layouts shrunk onto a phone make temperature unreadable—the exact failure WML avoided by having no layout. If you emit HTML that modern browsers will treat as desktop, set a viewport so the layout width matches the device (width=device-width, initial scale 1) rather than a 980 px table scaled to dust. The W3C CSS viewport work and HTML’s viewport meta exist so the text stays at a readable CSS pixel size. Do not disable user scaling. A visitor who needs larger type is not attacking your design; they are reading a number.

Contrast. Night palettes copied from a banner gallery can fail WCAG contrast on a washed-out phone screen. Temperature is the primary text. It must meet a contrast ratio that survives cheap panels (WCAG 2.2, last checked 13 August 2026). Do not encode units only in color.

Linearization. If CSS fails, the document order must still read as label, value, unit, time. Absolute-positioned gauges that dump in source order as “12 34 56” without labels are inaccessible and scientifically useless.

Time and language. Use real text, not images of digits, so screen readers can speak 21.4 degrees Celsius at 16:03. Give the page a language. Cumulus locale settings and HTML lang should not disagree on decimal commas.

Focus and links. If /wap2.php links to extremes, webcam, or the full site, links need visible focus and text that says where they go. “Click here” next to a temperature looks like the temperature is the link target.

Completeness still applies. XHTML-MP’s extra layout budget is not permission to omit units or the packet time. Those rules live on /wap.php and remain in force here. The second generation adds presentation capability; it does not subtract the measurement contract.

What should not move to /wap2.php

  • A second set of Cumulus bindings with different units than /wap.php.
  • Autoplaying webcam loops. Bandwidth and motion sensitivity aside, a video is not a timestamped observation.
  • Login walls. A public station’s mobile observation is a GET.
  • Desktop three-column Cumulus templates with the word “wap2” in the filename.

If the XHTML page is larger than the WML deck, that is expected. If it is larger because it pulled the whole default Cumulus site, the URL has been misused.

Modern relevance

Today’s phones speak HTML and CSS that dwarf XHTML-MP 1.0, but they still have viewports, zoom, and assistive technology. /wap2.php is the historical name for “the mobile page that is allowed to have style.” The durable rules are: keep a stable simpler URL for the poorest clients, do not let CSS contradict the numerals, allow zoom, and keep the same web-tag meanings as every other consumer.

TNET’s public explanation of observed, modelled, and derived information is how the service works. Short-display field grouping is evidence families. Source files and freshness are data sources and methodology. The Cumulus hub lists the related historical projects.

Sources