the internet could be so much better

I recently came to the conclusion that browser infrastructure is one of the most overlooked yet important frontiers in computing.

Most people think of browsers as just one computer application of many. Yet, over the past ten years, applications that once lived on our devices have all moved to the browser:

Browsers are now the universal portal to our digital lives—work, entertainment, communication, finance, healthcare, education, and everything in between. Yet, its architecture was not designed for the internet we use today.

Origins of the everything app

In 1989, Tim Berners-Lee created the web at CERN so he could share academic papers with other researchers around the world. The web's make-up still reflects that origin:

When you view modern websites through this lens, you can see the document DNA still present. A web "page" is still fundamentally a document at its core, even when displaying a sophisticated application.

Problems with the everything app

Some of the most annoying parts of the internet stem from its document-centric foundation:

pop-ups

Pop-ups exist because the document model treats every element as part of a document, allowing websites to inject new elements at any time without user consent. There's no infrastructure-level distinction between essential content and interruptive elements.


<!-- This is possible because the DOM allows arbitrary insertion of elements -->
<div id="newsletter-popup" class="popup">
  <h2>Subscribe to our newsletter!</h2>
  <button onclick="closePopup()">No thanks</button>
</div>
	

In most application architecture, the user controls if and when interface elements appear.

sluggish page loads

The synchronous loading model inherited from document days forces browsers to parse and execute JavaScript before rendering interactive content. Modern frameworks like Next.js and tools like Vite help, but they still operate within the limitations of a document-based web.


export default function App() {
  const [isLoaded, setIsLoaded] = useState(false);
	
  useEffect(() => {
    // Initialization that blocks interactivity
    initializeFramework();
    loadUserData();
    setupEventListeners();
    setIsLoaded(true);
  }, []);

return (
  <div className="app">
    <Header />
    <MainContent isLoaded={isLoaded} />
    <Footer />
  </div>
  );
}
	

authentication for every. damn. website.

The internet's TCP/IP protocol lacks infrastructure for secure, user-controlled identity sharing. It never even mentioned authentication in its original spec. This means every website has to roll its own authentication scheme and—of course—force users through it.


function checkAuthentication() {
  const token = localStorage.getItem('authToken');
  if (!token || isTokenExpired(token)) {
    redirectToLoginPage();
  }
}
	

A true application platform would have provided system-level identities that users could selectively share across trusted contexts.

captchas

Because we never built a security model with the concept of user-authorized controls, browsers force websites to implement crude detection mechanisms like CAPTCHAs. Annoyingly, they're only increasing around the internet despite the well-known fact that AI can solve them.

the internet is full of data silos

The current web is artificially fragmented. Information and functionality are siloed within individual websites, forcing users to adapt to each site's unique interface, authentication system, and workflow.

What if we could compose the unstructured internet?

Consider planning a trip. To do that, you use the internet to:

Each service is an isolated destination. With LLM reasoning capabilities, it's increasingly possible to compose the web, tailored specifically to you:


async function planTrip(destination, dates) {
  const flights = await browser.extract({
    sites: ['united.com', 'delta.com', 'kayak.com'],
    data: 'flightOptions',
    filters: { destination, dates }
  });

  const hotels = await browser.extract({
    sites: ['hotels.com', 'airbnb.com', 'booking.com'],
    data: 'accommodations',
    filters: { location: destination, dates }
  });

  const weather = await browser.extract({
    sites: ['weather.gov', 'accuweather.com'],
    data: 'forecast',
    filters: { location: destination, dates }
  });

  const attractions = await browser.extract({
    sites: ['tripadvisor.com', 'yelp.com'],
    data: 'topAttractions',
    filters: { location: destination }
  });

  return agent.compose({
    flights, hotels, weather, attractions,
    template: 'tripPlanner'
  });
}
	

This could be surfaced in a chat app, a visual interface, or anything else. More than a marginally better user experience, a composable web would fundamentally reshape our relationship with the internet, how we access it, and how we live our lives.

A user-defined internet

Today, websites define our experiences, and we are forced to adapt to them.

Want to view content without advertisements? Sorry!
Need to extract your data? Have fun building a scraper.

This isn't a technology problem; the internet was designed to prioritize website control over user agency. A truly user-centric experience would flip this relationship:

Historically, this wasn't possible to encode—but LLMs' general-purpose reasoning and generative personalization now make it possible. What's changed is that we have new primitives: fast, cloud-hosted browsers, language models that can reason through interfaces, agent frameworks that treat the web as something programmable, not just viewable.

A better internet

The browser has become our primary computing environment as computing has moved to the cloud, but I think we're just getting started. A truly personalized internet feels inevitable (I'm sure I'm not alone in moving my Google searches—and more—to LLMs).

The best case scenario? Digital friction disappears, information flows freely, and human creativity is liberated from mundane, repetitive tasks.

A world wide web that's composable, automatable, and shaped by users rather than websites: that's what the internet should be.


april 16, 2025
← back