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.
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.
Some of the most annoying parts of the internet stem from its document-centric foundation:
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.
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>
);
}
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.
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 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.
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.
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