Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions .changeset/brave-otters-spend.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
---
'@o2s/blocks.featured-service-list': minor
'@o2s/blocks.notification-details': minor
'@o2s/blocks.notification-list': minor
'@o2s/blocks.payments-history': minor
'@o2s/blocks.payments-summary': minor
'@o2s/blocks.service-details': minor
'@o2s/blocks.article-search': minor
'@o2s/blocks.orders-summary': minor
'@o2s/blocks.ticket-details': minor
'@o2s/blocks.category-list': minor
'@o2s/blocks.order-details': minor
'@o2s/blocks.surveyjs-form': minor
'@o2s/blocks.ticket-recent': minor
'@o2s/blocks.article-list': minor
'@o2s/blocks.invoice-list': minor
'@o2s/blocks.service-list': minor
'@o2s/blocks.user-account': minor
'@o2s/blocks.quick-links': minor
'@o2s/blocks.ticket-list': minor
'@o2s/blocks.order-list': minor
'@o2s/blocks.category': minor
'@o2s/blocks.article': minor
'@o2s/blocks.faq': minor
'@o2s/frontend': minor
'@o2s/ui': minor
---

added support for prioritizing image rendering in order to disable lazyloading for images above the fold
31 changes: 31 additions & 0 deletions .changeset/chubby-candles-cut.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
---
'@o2s/blocks.featured-service-list': minor
'@o2s/blocks.notification-details': minor
'@o2s/blocks.notification-list': minor
'@o2s/blocks.payments-history': minor
'@o2s/blocks.payments-summary': minor
'@o2s/blocks.service-details': minor
'@o2s/blocks.article-search': minor
'@o2s/blocks.orders-summary': minor
'@o2s/blocks.ticket-details': minor
'@o2s/blocks.category-list': minor
'@o2s/blocks.order-details': minor
'@o2s/blocks.surveyjs-form': minor
'@o2s/blocks.ticket-recent': minor
'@o2s/blocks.article-list': minor
'@o2s/blocks.invoice-list': minor
'@o2s/blocks.service-list': minor
'@o2s/blocks.user-account': minor
'@o2s/integrations.mocked': minor
'@o2s/blocks.quick-links': minor
'@o2s/blocks.ticket-list': minor
'@o2s/blocks.order-list': minor
'@o2s/modules.surveyjs': minor
'@o2s/blocks.category': minor
'@o2s/blocks.article': minor
'@o2s/api-harmonization': minor
'@o2s/blocks.faq': minor
'@o2s/frontend': minor
---

made improvements to the way the code splitting to reduce the total size of JS bundles
6 changes: 6 additions & 0 deletions .changeset/stale-forks-pay.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
'@o2s/frontend': minor
'@o2s/ui': minor
---

reduced JS bundle size by not moving to dynamic icon loading
5 changes: 5 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,8 @@
*.jpg binary
*.jpeg binary
*.png binary
*.gif binary
*.webp binary

# Videos
*.mp4 binary
5 changes: 2 additions & 3 deletions apps/api-harmonization/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
"license": "MIT",
"exports": {
".": "./src/index.ts",
"./blocks": "./src/blocks/index.ts",
"./modules": "./src/modules/index.ts"
"./blocks/*": "./src/blocks/*.ts",
"./modules/*": "./src/modules/*.ts"
},
"scripts": {
"dev": "cross-env NODE_ENV=development nest start --watch",
Expand Down Expand Up @@ -42,7 +42,6 @@
"reflect-metadata": "^0.2.2",
"rxjs": "^7.8.2",
"string-template": "^1.0.0",
"survey-core": "^2.0.9",
"winston": "^3.17.0",
"xmlbuilder2": "^3.1.1",
"@o2s/blocks.faq": "*",
Expand Down
2 changes: 1 addition & 1 deletion apps/api-harmonization/src/modules/login-page/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
export const URL = '/login-page';
export { URL } from './login-page.url';

export * as Model from './login-page.model';
export * as Request from './login-page.request';
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export const URL = '/login-page';
2 changes: 1 addition & 1 deletion apps/api-harmonization/src/modules/not-found-page/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
export const URL = '/not-found-page';
export { URL } from './not-found-page.url';

export * as Model from './not-found-page.model';
export * as Request from './not-found-page.request';
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export const URL = '/not-found-page';
2 changes: 1 addition & 1 deletion apps/api-harmonization/src/modules/organizations/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
export const URL = '/organization-list';
export { URL } from './organizations.url';

export * as Model from './organizations.model';
export * as Request from './organizations.request';
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export const URL = '/organization-list';
2 changes: 1 addition & 1 deletion apps/api-harmonization/src/modules/page/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
export const URL = '/page';
export { URL } from './page.url';

export * as Model from './page.model';
export * as Request from './page.request';
1 change: 1 addition & 0 deletions apps/api-harmonization/src/modules/page/page.url.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export const URL = '/page';
2 changes: 1 addition & 1 deletion apps/api-harmonization/src/modules/routes/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
export const URL = '/routes';
export { URL } from './routes.url';

export * as Model from './routes.model';
export * as Request from './routes.request';
1 change: 1 addition & 0 deletions apps/api-harmonization/src/modules/routes/routes.url.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export const URL = '/routes';
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
---
slug: building-composable-frontends-with-strapi-and-nextjs
title: 'Building composable frontends with Strapi and Next.js'
description: 'Learn how to build composable frontends using Strapi CMS and Next.js. Discover dynamic content modeling, reusable UI blocks, flexible layouts, and scalable component architecture for modern web applications.'
keywords: ['Strapi CMS', 'Next.js', 'composable frontend', 'headless CMS', 'content modeling', 'dynamic layouts', 'reusable components', 'UI blocks', 'content management', 'frontend architecture', 'component composition', 'page builder', 'content modeling', 'API integration', 'React components', 'TypeScript', 'frontend framework']
date: 2025-03-28
tags: [tech, integrations]
authors: [marcin.krasowski]
Expand All @@ -14,11 +16,11 @@ We’re building a frontend-first framework for composable customer portals –
To support dynamic content, reusable UI blocks, and flexible layouts, we needed a CMS that gives developers control over structure while staying accessible to business users.

That’s where **[Strapi](https://strapi.io/)** comes in. In O2S, we use it not just for managing page content, but also for defining layout templates, page structures, and component configurations. This approach helps us find the right balance between flexibility for editors and consistency in the frontend.

<!--truncate-->

In this article, we’ll show how Strapi powers the content architecture behind our composable frontend, and how it integrates with Next.js to deliver dynamic pages, structured layouts, and scalable UI patterns.


## Web content management in modern front-end apps

One of the challenges that often comes with large-scale frontend applications is managing the content in a way that on one hand gives the content editors
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading