import Container from './Container'; const features: { title: string; description: string; icon: string }[] = [ { title: 'Unified sites', description: 'Present data and content in one seamless site, pulling datasets from a DMS (e.g. CKAN) and content from a CMS (e.g. wordpress) with a common internal API', icon: '/images/icon-unified-sites.svg', }, { title: 'Developer friendly', description: 'Built with familiar frontend tech Javascript, React etc', icon: '/images/icon-dev-friendly.svg', }, { title: 'Batteries included', description: 'Full set of portal components out of the box e.g. catalog search, dataset showcase, blog etc.', icon: '/images/icon-batteries-included.svg', }, { title: 'Easy to theme and customize', description: 'installable themes, use standard CSS and React+CSS tooling. Add new routes quickly.', icon: '/images/icon-easy-to-theme.svg', }, { title: 'Extensible', description: 'quickly extend and develop/import your own React components', icon: '/images/icon-extensible.svg', }, { title: 'Well documented', description: 'full set of documentation plus the documentation of NextJS and Apollo.', icon: '/images/icon-well-documented.svg', }, ]; export default function Features() { return (

How Portal.JS works?

Portal.JS is built in JavaScript and React on top of the popular Next.js framework, assuming a "decoupled" approach where the frontend is a separate service from the backend and interacts with backend(s) via an API. It can be used with any backend and has out of the box support for CKAN.

{features.map((feature, i) => (

{feature.title}

{feature.description}

))}
); }