CMS & News Portal
March 2026 – Present
A custom-built multi-tenant headless CMS and high-performance news portal (no Sanity, no Strapi), in production with several newspapers. Every newspaper runs on the same engine and the same infrastructure: adding one is configuration and theming, not a new project, and it adds no per-site licence.
El Editor Platense: same engine, same infrastructure, its own domain, brand and front page Drag-and-drop layout editor: the front page is assembled from widgets, no code involved
The problem
Off-the-shelf CMSs charge per site and per seat, and don't bend to how a newsroom actually works: scaling to several newspapers on one of them multiplied the licence and left every customisation in the vendor's hands. Building it in-house traded that recurring bill for owned infrastructure, and put the product, the data and the pace of change back on the company's side.
Features
- Article lifecycle: draft, scheduled, published, archived and restored, with full version history and audit trail
- Drag-and-drop layout editor for home, article and category, with 15+ widget types
- Rich text with EditorJS and an S3 media library with cropping, focal point and metadata
- Real-time analytics (24h / 7d / 30d), audience segments, staff leaderboards and trending content
- Per-newspaper dynamic sitemaps: an index covering news, paginated news-full, front page, categories, tags and authors; the Google News one carries image, keywords and publication date per article
- Structured data on every article: NewsArticle, BreadcrumbList, WebSite with SearchAction and NewsMediaOrganization
- Canonicals with slug history, per-newspaper robots, OpenGraph and Twitter Cards with a 1200×630 image generated per tenant, and RSS with WebSub
- Images on S3 + CloudFront, served as WebP in several sizes depending on where they are used
- Lighthouse mobile on a live article, all four categories green: 93 for performance and 100 for SEO, accessibility and best practices, with CLS 0
- SEO scoring inside the editor: the newsroom sees what an article is missing before publishing it
- Banner and advertising system
- Automatic publishing to Twitter/X, idempotent and schedulable
- Category and tag hierarchy with per-category layouts
- Author and staff profiles, with per-newspaper theming
- AI content assistance with Gemini
- Concurrent-editor presence: who is editing what, live
- Multi-tenant with per-newspaper isolation, RBAC and full audit logging
- Onboarding a newspaper is configuration: own domain, palette and type, social accounts, analytics and layouts — no fork, no separate deployment
- A React component library published to npm and shared by the admin and the portal
My responsibility
Full-stack on a team, across all four repos: API, admin panel, public portal and the shared component library I published to npm.
Stack
- Frontend
- Next.js 15 (App Router, SSR/ISR, dynamic sitemaps), React 19 + Vite + MUI (admin), EditorJS, in-house component library published to npm
- Backend
- Node 18 (ESM), Express 4, Sequelize 6, PostgreSQL, JWT + RBAC, AWS S3 + CloudFront, Sharp, FFmpeg, SendGrid, Google Gemini