IONICWEBCREATOR
Engineering Journal
ReactHow we work · Part 2

A data layer built for Server Components

Server Components change where data fetching belongs. Here is the service-seam pattern we use so pages compose data without ever knowing where it came from.

Jakir Hussian

Jakir Hussian · Founder & Engineering Lead

Apr 30, 20267 min read

Share

Updated May 4, 2026

With Server Components, the page is the composition root: it awaits data and hands typed props to pure sections. The trick is making sure the page never knows whether that data came from a database, a mock, or an API — only the service does.

The page composes, the service resolves

engineering-journal/page.tsxtsx
export default async function JournalPage() {
  const [featured, latest, categories] = await Promise.all([
    getFeaturedArticle(),
    getArticles(),
    getJournalCategories(),
  ]);
  return <Explorer featured={featured} articles={latest} categories={categories} />;
}

Islands only where you touch

  • The listing is a Server Component; only the filter + search is a client island.
  • The article body renders on the server; the table of contents and reading progress are the only islands.
  • Everything else ships as HTML — fast, indexable, and cheap.
  • #Server Components
  • #Next.js
  • #React
  • #Architecture
Newsletter

New essays, in your inbox.

Occasional, considered writing on engineering products that scale. No cadence promises, no noise — only when we have something worth your time.

One or two emails a month. Unsubscribe anytime.

Building something that has to scale?

If the way we think about engineering matches the standard you're after, tell us what you're building. We'll be honest about fit and outline a concrete first step.