Reading the Complete Series
This page combines all four parts of the Mosaic series for continuous reading. A floating table of contents appears as you scroll to help navigate between sections. You can also read each part individually from the series overview.
Part 1: The Problem with Apps Today
5 min read β’ September 12, 2025
Think about the last time you planned a trip.
π± You opened your airline's app to check flights.
πΊοΈ Switched to Google Maps for directions.
π¬ Used WhatsApp to coordinate with friends.
π Maybe downloaded a translation app just for the week.
πΈ And after the trip? You probably dug through Photos and a budgeting app to figure out what you spent.
That's five or six apps β all for one journey.
This is normal today. But it doesn't feel right, does it?
We live in a world where apps are still siloed products. App stores want you to search, install, and learn them one by one. But our lives don't fit into silos. We live in flows β trips, health check-ups, courses, projects β and those flows cut across dozens of apps.
This series is about a different way of thinking:
Mosaic
What is Mosaic?
At its core, Mosaic is a vision:
- Instead of monolithic apps, we think in tiles β small modular capabilities.
- A user's intent ("I'm visiting Tokyo") becomes the starting point.
- The right set of tiles assemble into a cohesive app, just for that journey.
- And as your journey changes, the app reshapes itself.

How Mosaic assembles the right capabilities for your specific journey
In the coming parts of this series, I'll unpack this vision step by step.
What This Series Will Cover
- Part 1 β The Problem with Apps Today
You're reading it! Why app stores and siloed apps don't fit the modern user journey. Introduce the Mosaic concept at a high level. - Part 2 β The Mosaic Concept: Adaptive Journeys
Deep dive on "tiles," adaptive layouts, self-updating flows. Tokyo trip example. - Part 3 β Under the Hood: Context Engine, Registry, Composer
Explain the building blocks and why this differs from MCP/agents. Discuss security, version locking, rollbacks. - Part 4 β Near Future & Beyond
Why PWAs are the natural first step. The long-term OS-level vision. Examples: travel, health, learning.
Why Start Here?
Before we can imagine a new model, we need to clearly see what's broken today:
- Too many apps. Every task means juggling 3β5 different tools.
- Too much friction. Search, install, learn, delete. Repeat.
- Too little adaptability. Apps don't evolve with your journey.
Mosaic is my attempt to rethink this from the ground up.
Homework for You
Before the next part, here's a simple exercise:
π Think of one thing you did this week that required 3 or more apps.
Write them down. How did it feel switching back and forth?
Hold onto that example β we'll revisit it in Part 2, when we imagine how Mosaic would handle it.
Part 2: Adaptive Journeys in App Flows
7 min read β’ September 13, 2025
The Challenge of Today's App World

The endless cycle of app hunting and learning new interfaces
Every time you need something new, you're pushed into the same cycle:
- π Search the app store.
- π Compare dozens of options with nearly identical features.
- π Read descriptions, ratings, and reviews.
- π± Download and install one.
- π― Learn a new interface β even if it works just like others.
- π€ Sometimes: register, verify email, or sign in.
All of this for just one tiny piece of your journey.
Take translator apps: the store is full of them, all doing roughly the same job. But as a user, you still need to guess which one is "best," install it, and learn yet another interface β even though what you really want is just translation within your current flow.
It's a never-ending battle of app hunting and app learning.
What Makes App Flows Different
π± Traditional Apps
Static: once you install them, they look and behave the same, regardless of your stage in a journey.
π App Flows
Dynamic and adaptive β living experiences that grow and shrink with your journey.
App Flows, by contrast, are dynamic and adaptive. They:
- Highlight what matters most right now.
- Fade out or remove tiles that are no longer relevant.
- Rearrange themselves automatically as your context shifts.
They are not "one app per problem" β they are living experiences that grow and shrink with your journey.
The Tokyo Trip Example

A Living Companion that evolves as your context changes
Let's imagine you're planning a trip to Tokyo.
π« Before the trip
- The App Flow emphasizes your flight tracker and hotel reservation details.
- Maps, translation, and restaurant suggestions exist but stay in the background.
πΎ During the trip
- The App Flow reshapes itself automatically.
- Now, the translation tile, navigation maps, and restaurant finder rise to the top.
- The flight tracker shrinks into a small widget since it's less critical.
πΈ After the trip
- Your photo gallery and spending tracker take the spotlight.
- The flight tracker disappears completely.
- You're guided into reflection, sharing, and memory instead of logistics.
ποΈ Beyond the trip: Disposable & Archivable Flows
Here's where App Flows truly differ from traditional apps:
- ποΈ Disposable by default: Once your Tokyo trip is complete, the entire App Flow can gracefully disappear. No cluttered home screen, no forgotten apps taking up storage.
- π¦ Archivable when needed: If you want to keep the flow for reference or reuse, it gets archived with all your preferences, favorite restaurants, and learned patterns intact.
- π Instantly retrievable: Planning another trip to Japan two years later? Your archived "Tokyo Trip" flow can be restored instantly, with all your previous preferences and learnings ready to go.
The Revolutionary Difference
Instead of permanent apps that accumulate on your device forever, you get temporary experiences that exist only as long as you need them β and can be recalled when relevant again.
This isn't just a self-updating app.
It's a Living Companion β an app that evolves as your context (location, time, role, and goals).
Defining App Flows and Mosaic
To be precise:
π App Flows
The representation of the user's goal or journey. They describe what you want to achieve (plan a trip, complete a course, manage a health check-up) and evolve as your context changes.
π― Mosaic
The composition engine that interprets App Flows. It brings together the right "tiles" β small modular capabilities like translation, maps, reminders, or payments β and assembles them into a single adaptive experience.
In short:
App Flows capture your intent.
Mosaic builds the experience around it.
Why Adaptive Journeys Matter
With Mosaic-driven App Flows:
Less clutter
Only what matters now is visible.
Less friction
No more searching, installing, or relearning interfaces.
More focus
Your app evolves with you, stage by stage.
More trust
You know the right tool will surface when you need it.
More human
Apps finally mirror the way we actually live β in flows, not silos.
Homework for You
π Homework 1:
Think of one journey in your life (a trip, a health check-up, a project, or a course). Write down the stages of that journey. What apps did you use at each stage?
π Homework 2:
On your phone, scroll through your installed apps. Which ones did you download for a single purpose β and never use again?
Imagine if those weren't permanent apps on your phone, but temporary tiles that appeared in your App Flow when needed, and gracefully disappeared afterward.
Part 3: Under the Hood of App Flows
15 min read β’ September 13, 2025
So far, we've looked at the why of Mosaic: today's apps create friction, and App Flows adapt to your journey like a living companion.
Now, let's look at the how. What would it take to actually build Mosaic with today's technology?
The Core Building Blocks
To make App Flows real, Mosaic relies on four components:

The four core building blocks that make Mosaic App Flows possible
1. The Context Engine
This is the brain of Mosaic.
Powered by a Large Language Model (LLM), it interprets a user's intent: "I'm visiting Tokyo," "I'm preparing for a check-up," "I'm starting a new class."
It uses signals like time, location, role, and past behavior to understand what stage of the journey you're in.
Unlike today's chatbots, which just respond to prompts, the Context Engine continuously updates context and reshapes the App Flow as your journey evolves.
2. The Registry of Tiles
The Tile Registry is the keystone of Mosaic β and the part that makes it more than "just another MCP."
In MCP, registries expose APIs that an agent can call.
In Mosaic, registries expose tiles: modular units made of three layers:
Logic Layer
Defines what the tile does.
Exposed as functions or API wrappers.
Example (TypeScript):
// logic.ts
export async function getWeather(location: string) {
const response = await fetch(`/api/weather?loc=${location}`);
return await response.json();
}
Presentation Layer
Defines how the tile looks inside an App Flow.
Built as reusable components (Web Components, Svelte, React, or Lit).
Supports different modes: card, widget, popup.
Example (Svelte):
<!-- WeatherTile.svelte -->
<script lang="ts">
export let weather: { temp: number; condition: string };
</script>
<div class="tile card">
<h3>Weather</h3>
<p>{weather.temp}Β°C β {weather.condition}</p>
</div>
Metadata Layer
Tells the Composer when and how to use the tile.
Example manifest (JSON):
{
"name": "WeatherTile",
"version": "1.0.0",
"provider": "Community",
"logic": "./logic.ts",
"presentation": {
"modes": ["card", "widget"],
"component": "./WeatherTile.svelte",
"props": {
"weather": "object"
}
},
"metadata": {
"context": ["travel", "daily-life"],
"priority": "medium",
"pairsWith": ["MapTile"]
}
}
So the registry doesn't store raw UI or screenshots. It stores logic modules, UI components, and metadata β everything needed for the Composer to use the tile.
3. The Composer
The Composer is the layout and integration engine.
- It receives a set of relevant tiles from the Context Engine.
- It looks at each tile's manifest (logic + presentation + metadata).
- It decides:
- Which tiles to show.
- In what order.
- In what presentation mode (card, widget, popup).
How the Composer Renders Tiles
The Composer uses a shared design system (like Tailwind, Material UI, or a custom theme) to keep tiles consistent.
It mounts tile components dynamically, passing in data as props.
Example flow:
- Context Engine says weather is relevant.
- Composer imports
logic.ts
, runsgetWeather("Tokyo")
. - Composer mounts
WeatherTile.svelte
in card mode, passing weather as props.
With existing web tech (dynamic imports, Web Components, Svelte/React), this is totally possible today.
Handling Multiple Tiles for the Same Thing
What if there are multiple tiles for weather or translation? Mosaic handles this in layers:
- Registry curation β verified tiles can be highlighted.
- Context Engine arbitration β the LLM can pick based on metadata (offline support, reputation, integration).
- User override β users can swap tiles if they prefer a different one.
- Coexistence β in some cases, multiple tiles can appear side by side.
This avoids today's app-store chaos while still allowing competition.
4. Security & Control
Dynamic apps need trust. Mosaic provides:
- Version locking β freeze your App Flow at a safe state.
- Rollback β undo unexpected updates.
- Verified tiles β signed by trusted providers.
- User overrides β control which tiles get used.
This ensures flexibility without sacrificing control.
Why PWAs Are the Bridge
We don't need to invent a new OS to make this work. Progressive Web Apps (PWAs) already give us:
- Self-updating behavior (Service Workers).
- Cross-platform reach (runs in browsers, mobile, desktop).
- Installability (can live on the home screen or open via link).
- Offline support (cached tiles, limited resilience).
PWAs are the perfect near-term vehicle for Mosaic β an App Flow could be shared as a link, installed instantly, and evolve dynamically.
PWA Limitations
- Limited access to device APIs (push, Bluetooth, sensors).
- Discoverability bias (native apps favored in app stores).
- On iOS, stricter background and storage restrictions.
So while PWAs can't yet replace every native app, they can already demonstrate the App Flow model in practice.
The Role of LLMs
The LLM-powered Context Engine is what ties it all together:
Interpret intent
User says: "I'm visiting Tokyo."
LLM infers sub-goals: flights, hotels, maps, translation, restaurants.
Query registry
Finds relevant tiles: FlightTile, HotelTile, MapTile, TranslateTile.
Assemble flow
Tells Composer which tiles to render, in what order, and in what mode.
The result: a persistent, adaptive App Flow that evolves with you, rather than static apps you have to juggle.
Why This Matters
With these pieces, Mosaic is not science fiction. Using today's tech:
- Logic can be written as functions or API wrappers.
- UI can be packaged as components.
- Manifests can live in a registry (like NPM for tiles).
- PWAs can deliver adaptive App Flows cross-platform.
- LLMs can interpret user intent and orchestrate flows.
Together, they transform apps from static silos into Living Companions that grow and adapt with your context β location, time, role, and goals.
Homework for You
π Homework 1: Pick one task you'd describe in a sentence ("I'm moving to a new house," "I'm training for a marathon"). What tiles would you need if Mosaic built an App Flow for you?
π Homework 2 (for builders): Take one feature from your app and imagine it as a tile. Write a simple manifest:
- What logic would you export?
- What UI component would you package?
- What metadata would you declare?
Part 4: The Near Future and Beyond
8 min read β’ September 13, 2025
In Part 3, we looked under the hood of Mosaic β the Context Engine, the Registry of Tiles, and the Composer. We also saw why Progressive Web Apps (PWAs) are the natural starting point.
Now let's go deeper: how exactly Mosaic works as a PWA today, and where it could go in the long term.
How Mosaic Works as a PWA
At first, Mosaic can be implemented as a single container PWA hosted at {abc.com}
.
When you install Mosaic once (from {abc.com}
), you get the wrapper app that includes:
- Context Engine β interprets user goals.
- Tile Registry client β fetches logic, UI components, and metadata.
- Composer β assembles tiles into an App Flow and renders it.
Each App Flow is just a route inside this PWA.
https://{abc.com}/appflow/tokyo-trip
https://{abc.com}/appflow/moving-house
https://{abc.com}/appflow/meal-planner
All three share the same manifest, service worker, and scope.
Why They Are Not Separate PWAs
Browsers determine PWA identity by the scope
field in the manifest.
If Mosaic defines its manifest with:
{
"name": "Mosaic",
"start_url": "/",
"scope": "/appflow/"
}
Then every route under /appflow/
belongs to the same installed PWA.
This means you install once, and all flows open inside that single container.
- To the OS, it's one PWA (one icon, one storage).
- To the user, each flow feels like a different app because the Composer dynamically reshapes the UI based on the flow ID.
So:
Tokyo Trip and Moving House are not two different PWAs.
They're two different parameters/configurations inside the Mosaic container.
This avoids clutter (otherwise every flow = new icon = recreating today's problem).
Why PWAs Are the Perfect Bridge
PWAs already provide many of the features Mosaic needs:
Self-updating
Service Workers let PWAs update silently in the background.
Flows evolve without reinstallations.
Cross-platform reach
PWAs run in browsers, mobile, and desktop.
Flows are just links β instantly accessible.
Installability
The container can live on your home screen.
Users can "install Mosaic" once, but still open any App Flow link.
Offline capabilities
Tiles can cache data or run local logic when offline.
Instant shareability
A Tokyo Trip flow is just a URL you can send to a friend.
When they click, it runs inside their Mosaic container (or in the browser if they haven't installed yet).
This makes PWAs the perfect near-term vehicle for Mosaic.
But PWAs Have Constraints
We should be realistic about today's PWA ecosystem:
- Device APIs β limited access to Bluetooth, NFC, sensors, and background sync.
- Discoverability β app stores prioritize native apps, PWAs feel hidden.
- Platform politics β iOS restricts push notifications, background tasks, and storage.
These constraints mean PWAs can't unlock every use case. But they can already demonstrate the core Mosaic experience: adaptive, self-updating, and shareable App Flows.
The Near Future: Hosted Registries
At the start, websites like {abc.com}
can host Tile Registries and Flow Builders:
- Developers publish reusable tiles.
- Users combine tiles into App Flows via a simple web builder.
- Flows are shared as URLs.
Multiple providers could host registries β just like multiple app stores exist today.
Some registries may specialize (travel, fitness, education), while others remain general-purpose.
The Long-Term Goal: OS-Level Mosaic
Over time, Mosaic could move deeper into the operating system, just like app stores and file explorers did.
- The Tile Registry becomes part of OS settings (where you choose which registries to trust).
- App Flows become OS-native adaptive apps, disposable and self-updating.
- Users don't manage dozens of installs. They simply trigger flows by expressing goals.
This is where Mosaic diverges from MCP (Model Context Protocol):
- MCP focuses on chat-based interaction β you ask, it responds.
- Mosaic delivers app-based experiences β not a conversation, but a disposable, adaptive app that appears, serves its purpose, and disappears.
Mosaic = chatless orchestration + goal-driven adaptive apps.
The Roadmap
Today
{abc.com}
as a container PWA.- App Flows are just routes (
/appflow/:flowId
) inside it. - Install once, open any flow by link.
Near Future
- Multiple hosted registries.
- Flow builders for families, teams, communities.
- Sharing flows feels like sharing docs or playlists.
Long Term
- Registry management at the OS level.
- Adaptive App Flows become first-class citizens of the OS.
- Apps as we know them give way to goal-driven flows.
Why This Matters
PWAs let us build Mosaic today β with one container app and flows as routes. Hosting registries at sites like {abc.com}
lets users and developers experiment now.
But the long-term vision is bigger: Mosaic as an OS-native orchestrator, with registries managed at the system level. Unlike MCP's chat-first approach, Mosaic enables goal-first disposable apps that adapt and disappear when finished.
The future isn't about apps you hunt down and install.
It's about flows that find you, adapt with you, and vanish when the job is done.
Homework for You
π Homework 1: Look at the URLs you used today. How many of them could be App Flows inside one container PWA instead of separate apps?
π Homework 2: If you're technical, read a PWA manifest on one of your installed web apps. Notice the scope field. Can you imagine how /appflow/:flowId
could all be grouped under one container?
Thank You for Reading!
You've completed the entire Mosaic series. Share your thoughts and continue the conversation.