01 — CONTEXT
The context
Rocio.com is a portal about El Rocío, one of Spain’s largest pilgrimages, with an editorial archive that starts in 1992: news, brotherhoods, sevillanas, videos and photography. All of it lived in a WordPress site with around 15 years of history.

02 — PROBLEM
The problem
The content existed, but it was trapped. WordPress stored almost everything as text key-value pairs: 320,093 metadata rows for what fits in about fifteen columns per entity, dates stored as text and thousands of empty fields. Beyond text search and manual browsing, the archive was practically inaccessible.

03 — CONSTRAINTS
The constraints
- 01Lose no content: more than three decades of archive, 102 tables in the production dump.
- 02Lose no links: old URLs have to redirect to their new destination.
- 03One person approves everything that gets published: the system has to make that sustainable.
- 04Respect third-party rights: nothing captured from social media is republished as is.
04 — SYSTEM
What I decided to build
A custom platform built with Nuxt 4 on MariaDB: a normalized data model, its own editorial panel, an AI assistant that answers questions about the archive, and a radar that monitors public sources, with a mandatory editorial step before anything is published.

05 — ARCHITECTURE
System architecture
SOFTWARE
Software
- Server-rendered public website built with Nuxt 4.
- A custom editorial panel for all dynamic content, migrated and new.
- Revision history: a snapshot before every save.
- 301 redirects from the old URLs, based on each item’s legacy identifier.
DATA
Data
- A normalized model with Prisma on MariaDB instead of the WordPress key-value schema.
- Migration through ETL processes from the real production dump.
- Search with FULLTEXT indexes and Spanish stop words.
- MariaDB as the single source of truth for everything else, AI included.
AI / AUTOMATION
AI and automation
- «Ask the archive» assistant over news, brotherhoods, sevillanas and historical events.
- The vector index is disposable: it is rebuilt entirely from the database without losing anything.
- The vector provider sits behind an internal contract: replacing it does not touch the rest of the system.
- Internal conversation viewer with cost, latency and ratings.
- A radar over 169 public sources on Facebook, Instagram, RSS, WordPress and the web, with a job queue that keeps running when the browser is closed.
- AI in the editorial panel for standfirsts, drafting and improving articles.

06 — DECISIONS
Key decisions, and why
Normalize before building on top
With 320,093 metadata rows stored as text, every new feature would have inherited the problem. A clean data model first; everything else after.
The database is the source of truth; the AI index is disposable
If the provider or the model changes, the index is regenerated from MariaDB. No provider identifier lives inside the editorial content.
Nothing external is published without original writing
The radar archives third-party posts. Publishing on the website requires at least one supporting signal and original writing, and the server enforces it. Every image needs an explicit rights decision.
No trends without volume
With few conversations in the archive, trend analysis would produce claims without a basis. The analysis waits until there is enough volume.

07 — RESULT
Result
- Rocio.com runs on the new platform, with the historical archive migrated.
- A public conversational assistant over the archive.
- A custom editorial panel and a source radar with an editorial step for the newsroom.
No invented business figures: what is shown exists and is documented.

08 — STACK
Tech stack
- Nuxt 4
- Vue 3
- TypeScript
- Prisma
- MariaDB
- Tailwind CSS
- OpenAI
09 — SIMILAR PROBLEMS
Similar problems I can solve
- →Your website or platform carries years of content trapped in WordPress or another CMS.
- →You need to migrate without losing content or links.
- →You want your archive or internal knowledge to be searchable in natural language.
- →You need an editorial panel built around how your team actually works.
This project is an example of custom software, data intelligence and ai & automation.
