Good afternoon, everyone.
I'm Arantxa Grajal, and today I'm here
to introduce our colleague, Rafa Mérida.
I don't know if you remember,
but a few years ago, a shipwreck occurred
there was an issue with a ship—
that was carrying a cargo
of rubber ducks
like this one, but smaller.
Those duckies ended up
scattered all over the Pacific,
reaching every coastline.
Because of that,
our colleague Rafa Mérida thought,
"Why not create a company
that can reach everywhere in the world?"
To start, he focused on Málaga,
founded the company Ductoy,
and to expand everywhere,
he began with Málaga’s small towns.
That’s why he created the app Pueblea.
But as for the development of this app,
how it integrates with WordPress
and its potential,
Our colleague Rafa Mérida
will explain it all to you.
A round of applause.
Good morning!
Can you hear me? How's it going?
Well, as Arantxa mentioned,
I'm here to talk to you about an app,
a website,
that we’ve been working on
for several years
—more than ten, to be precise—
called Pueblea,
which revolves around rural tourism,
promoting events in Málaga’s small towns,
towns with historical heritage, culture,
and the tourism potential
that institutions often overlook,
Giving these small towns a chance
to develop their cultural
and tourism offerings.
My name is Rafa Mérida.
I run a small web design
and development studio in Málaga.
In more than 15 years
of working with WordPress
Our company will be 20 years old next year
We've developed, I believe,
more than 300 projects.
First, I’d like to thank the organizers.
And, well, with all this WP Drama going on
I want to say that, despite everything
Gathering more than 200 people
for a WordPress event
speaks volumes—
it shows that the project is thriving,
that many of us who
had doubts are still aboard this ship,
and we hope to continue developing
WordPress projects for many years.
Now, let’s get into our project.
This isn’t a talk to promote a project
or gain traffic,
because, as I’ll explain,
it doesn’t generate any money.
Originally, the talk was titled
“How to Build an Event Website
Without an Event Plugin,”
but we ran it through ChatGPT,
and it gave us a more clickbait-y title.
But Pueblea isn’t just
an event app or website—
it's much more.
It’s a guide to towns, their customs,
festivals, traditions
and especially their gastronomy,
which we focus on heavily.
The core of this project is to
promote small towns
in what’s called "Empty Spain"—
which also exists in Málaga.
Empty Spain isn't exclusive
to central Spain
I, for example, live in Torremolinos,
a rural area,
but Málaga has many small towns,
like my father’s
which has only 200 inhabitants and
gets no attention from local institutions.
We aim to promote these small towns
and their events.
Quick summary—how did this project start?
We love visiting small towns.
10 years ago there was
no online event guide
You’d have to check the Monday newspaper,
Diario Sur,
and find out, “Yesterday,
the Matanza Festival was held in Ardales”
or “The Migas Festival happened in Torrox”
And we’d think,
“Great, another weekend event we missed.”
So we started compiling events
for personal use,
then turned it into an app,
which we had on
iOS and Android for a few years.
But due to costs—
it’s expensive to maintain an app—
in 2022, we redesigned it using WordPress.
The change was dramatic
—easier to manage events,
much more efficient overall.
Right now, we only cover Málaga
because 102 towns plus the capital
is already a challenge.
At peak season,
we post over 25 events per week,
which is a lot.
Some quick numbers—
we’ve been doing this for over 10 years,
with more than 3,000 events posted.
Recently, we made
accessibility improvements
to meet AA standards
as required by the digital kit program.
As for event categories,
gastronomy is the top driver.
People love attending food events.
Once, a foreign visitor told us,
“I’ve discovered that in Málaga,
if you plan well,
you can eat for free every day.”
They say the same about
WordCamps, right, Nilo?
Honestly, I only came today because
they said there'd be wine.
Funding and grants we’ve received?
Zero, of course.
Institutions don’t support
projects like this
They have their reasons,
but we keep going.
We’re moving forward,
with or without help.
Managing event websites is tricky.
Many sites use WordPress posts
to announce events,
but people get confused
between the post date and the event date.
So we ruled out that approach.
Who here has worked with
WordPress event plugins?
The Event Calendar,
Event Manager, EventON?
Come on,
let’s aim for something more efficient.
Custom Post Types can do the job
without bloated plugins.
It’s frustrating
to spend all week adding 20 events
only to have them disappear on Monday.
That’s why we created a “Lazy Mode”—
when we’re overwhelmed,
instead of showing upcoming events,
we display past events.
Our homepage
is structured into three timelines:
this weekend’s events,
upcoming events, and past events.
We’ve already added events
for next January.
We need to organise events
per categories:
duration, topics, the event type
Therefore, we took the Malaga province
as we do not receive any help,
we often do not have any information,
and we have to search
for information by ourselves,
and that is why we chose
this topic for investigation
We prioritize free and low-cost events,
Focusing on rural,
cultural, and gastronomic themes,
customs, music.
No bullfighting or hunting events—
we don’t post those.
How is the home page structured?
Over 10 years, our homepage has evolved
to show upcoming events right away.
The Homepage has evolved
from an early version
in which we had lots
of CTAs to download the app.
Now we no longer have an app
and have moved almost directly to
displaying the list of events,
as I said
starting with the most recent—or,
the closest one,
the one ending soonest
and then the following ones.
We have several areas
on the homepage
These would be the upcoming events.
- last week events,
these are the ones happening this weekend.
We have six
or seven events this weekend
And then the next block below
where we have the finished events
are from the week,
in this case, two weeks ago.
We always put that little sign
saying "finished"
because
people
sometimes don't pay attention
to the dates either.
We've also pretty well
proven this
I just wanted to repeat
The homepage is an event grid—
every week, we have to refill it.
Like the tyranny
of the home page, I call it.
This would be a bit of
The structure as designed in outline
I see people coming in,
so wait a bit or go back a bit to
what I'm explaining.
we're explaining a website we
have for events in the towns of Malaga
I'm just going to summarize
very quickly.
We're also explaining
the structure of the home page,
which we've had over
the course of 10 years,
an evolution to optimize it
as much as possible
and make it clearer for the user.
What I wanted you to see here
is that we have narrowed down
the Hero Zone much smaller
because what we want
is that already on the first scroll
events appear.
Previously, we had them organized
in two columns,
the upcoming events,
but we had a problem.
When there's an odd
number of events,
what happens?
A little gap is left here.
So, sometimes there aren’t
enough events to make even numbers.
That was a problem
that we later solved.
These are the upcoming events
that are right below,
for which we have the same problem.
If we have an odd number of events,
one will be left hanging here.
We also had
some designed advertisements
to place here
when the number was odd,
but in the end,
we decided to remove them.
Oh, and here,
both in this
with the page
and in the first
part of the scroll,
we placed
a carousel on mobile.
Because when the number is odd,
the carousel works well,
but on mobile, people
didn't find it intuitive
or realize that there were more slides.
They thought
there was only one event
that weekend.
So, the carousel idea
was also discarded.
And finally,
on the homepage,
we have a grid
also in two columns
with past events.
here there's no problem
with odd or even numbers
because we have
a buffer of 3,000 events,
and if we show 50, 40, or 80,
they will always be even numbers.
No problem.
Design decisions.
There were a few things
I wanted to talk about.
Always, as I mentioned before,
we have aimed to have page more intuitive
to make it very easy to use,
ensuring that the events
are at the top,
without unnecessary decoration
or excessive details,
making them quickly visible.
We had to prioritize
and design appropriately
so that these loops were displayed
optimally,
making them clear,
with well-visible dates,
and ensuring
the event posters were prominent.
As I mentioned,
the most recent events
appear first,
moving towards older ones.
We worked a lot on date formats
because we didn’t like showing the dates
in the format 26/10/2024.
We'll see later
that we created shortcodes
to handle that issue.
Regarding poster formats,
well, we found a bit of everything.
Often, event posters
are designed by
non-professional designers.
Like the typical retiree
who takes a painting course,
or the "sobriety manager"
who jumps onto Canva
or AI tools
to make posters.
We see all kinds of things.
Internally, we have a folder
where we archive
the most horrifying ones,
but we will never
publish that ranking—
although honestly,
it would make a hilarious post.
There was even a private Facebook group
we had called
"Colorful fans look like its legs",
referencing that famous song
El Toro Enamorado de la Luna.
Well, now we’ll see
how creative people can be
when inventing formats.
Regarding grids,
we unified them into two types
of listing grids or loops,
which we now see.
The standard ones
we saw earlier, which are elongated,
and the compact ones
used for search results.
Lastly, we used
the full site editing system
in Elementor to create archive pages,
event single pages,
town single pages,
and everything else.
The page is built in Elementor,
optimized for loading speed.
However, in the coming weeks,
we are working
to migrate it to BricksBuilder,
which is much more efficient.
Although, to be fair,
the page already
has great performance metrics.
Here’s a sample
of events we received
last month.
As I said,
when non-professionals
create posters,
we get all kinds of
random formats—
vertical ones (ideal),
slightly too wide,
horizontal ones,
and even square ones
from the local government.
Apparently, they haven’t realized
Instagram now supports
different image formats.
Creating a coherent grid
with such material
is very complicated.
If we were working
with a music concert
or movie website,
the marketing team
would make sure
to provide both horizontal
and vertical formats.
This ultimately means
it’s challenging
to work with event layouts.
The final grid structure
we settled on
was a single-column layout,
the decision we came to was
to work with a single column
to highlight the date a little more.
We'll see it now because this is the
outline on the next slide.
I already have a screenshot,
make the images a little bigger
and make it a single column,
so it won't be lame when
they are odd numbers, and
there's no problem with that.
Of course, we had to adapt it
to 1,300 width so the grid doesn't
remain half empty
Now let's see, this would be how
it looks in real mode,
here it has very little text,
but normally the extract is like this,
and here the date is a little more.
It has a context,
which we'll explain later, okay?
And the event poster, well,
it's a little bigger
and looks a little better.
Besides, of course, the rectangular ones
are cut off in the center,
so you know what,
there's something else we can't do.
This is a screenshot
of a single event page.
This event is from
my father’s village,
a tiny town.
It is an event that is always
held in October
and has a little poster.
Then, here in an attached file,
we have added that a gallery
can be included in the event—
a photo gallery,
screenshots, or even a little button
here for more information
linking to an external URL.
In this case, I captured it
when it had already ended.
It always comes with its little
"Finished" tag.
Then, if we keep
scrolling down on the event page,
we see the Google map
of the town
and a summary of the city itself
with a button
to view the full town profile.
The photos we have used
are from two friends,
two other lone wolves
who ventured into doing things
for the towns
and who also doesn't monetize.
They gave us all their
catalog photos to illustrate
the 103 towns.
Then, if we scroll further down
—remember, this is the event profile—
we can see more events from QTAR,
and they are listed
from the most recent to the oldest,
one below the other.
There is an infinite scroll
so that more events load
as you scroll down.
Custom Post Type Structure
and Relationships
This part is about how
everything is organized
at the database level.
We have two main CPTs:
one for events and one for towns.
These are related to each other.
Normally, each event takes place
in a single town,
but some events occur
in multiple towns simultaneously.
For example, there's a Verdiales festival
that takes place on the same day
in three different towns.
So, we have a many-to-many
relationship between the two.
Additionally, a town can have
multiple events.
We also had a case
where a charity organization
held a fundraising fair
simultaneously in 20 towns.
We had to give it a special format
because ABOY,
the Association of Volunteers
for Pediatric Oncology,
are our friends.
We collaborated with them gladly.
It was a lot of work,
but it turned out quite well.
As I mentioned,
we have many-to-many relationships.
Each CPT has its custom fields.
Now, I'll explain how
we used to handle it:
towns were originally a taxonomy
under events.
This setup works but is less scalable.
If you separate towns as their
own Custom Post Type,
you can later add
other related content to them.
For example, a town
could have points of interest,
businesses, and rural accommodations,
which could have their profiles
linked via relationships to that CPT
Here are the custom fields
we currently have for events.
There is a many-to-many relationship
with towns, and then
this is a taxonomy for this CPT
—these are the categories.
We have about 10 to 12
different categories.
In the next slide,
I've just included an extended
example of this structure,
which is how we designed
the WordPress Málaga website.
Here, we have four major CPTs
all related to each other,
making it much more scalable
and efficient for future projects.
I just wanted to show it
because we followed the same philosophy.
Regarding the theme and plugins,
the core of all this is JetEngine—
this Crocoblock plugin
for creating Custom Post Types
taxonomies, and more.
We have Anna from Crocoblock here,
so let’s give her a round of applause
because they make fantastic software.
Thank you, Anna.
We also use other Crocoblock plugins
focused on search and filters.
We've optimized everything,
and we currently use Elementor,
but we are transitioning to Bricks.
Here’s an event profile from last year
—a concert by La Tremendita,
one of our local artists from Granada.
It was an amazing concert
at the Jewelry Center,
exactly a year ago on October 26th.
I’m showing this to illustrate
how we format the event date labels.
We use shortcodes and functions
to display the date more naturally.
WordPress has built-in date formatting,
but we go way beyond that,
which I’ll show in the next slide.
We also use conditional logic
to automatically sort events as
"This Weekend," "Upcoming," or "Finished"
without manually adjusting the date.
They dynamically appear
in the correct timeframe.
Additionally, we have specific queries,
which I'll go over later if there’s time.
About date formatting:
Most conventional plugins display
dates awkwardly.
For example, instead of listing
"October 26, October 27,"
we display it more naturally:
"October 26–27."
We have various conditional date strings
depending on the event duration,
start and end dates, etc.
This makes dates easier to read naturally.
In the next slide,
here’s a snippet of the shortcode
that handles this logic.
It analyzes event duration,
past/present/future status,
and whether it starts and ends
in different months
It ensures natural-sounding date strings.
This improves readability
based on the visitor’s current date.
About queries:
We use custom database queries
to check for events today,
tomorrow, etc.
so we don’t show
an empty "Events Today" block.
We handle this using
JetEngine’s Query Builder.
By the way, JetEngine's
Query Builder now has AI—
if only they had released it
two years earlier!
For searching, we use JetSearch
and JetSmartFilter.
JetSearch enables autocomplete,
while JetSmartFilter lets users filter
by town or category.
We also use relevancy weighting
to ensure meaningful search results,
preventing posts or town names
from cluttering the results
—only events appear.
One more thing:
We’ve developed an event
prediction system.
No, we’re not fortune tellers
or using
Minority Report-style premonitions.
We query past events
within a ±1-week range
If last year had the 26th Mule Fair
and 10th Bandit Passion,
Chances are this year
will have the 27th
and 11th editions, respectively.
We check town hall websites,
copy event details, tweak the text,
and update the date.
This saves us time since we rarely
get official updates.
Tracking 103 towns manually
would be impossible.
Since we get no funding or official info,
we handle everything ourselves.
That’s it, Verónica.
Now, let's open the floor for questions.
Thanks, everyone!
I loved the "Sovereignty Manager"
concept—brilliant!
Now, let's hear from this gentleman.
Have you considered
monetizing the website?
I knew someone would ask that!
The site barely covers hosting costs.
If AdSense lowers performance
below 90, we ditch it.
Next question...
Do organizers submit events,
or do you manually add them?
We considered giving towns access
but rejected it due to poor
content formatting.
They'd upload a councilman holding
the event poster instead of
the actual poster!
How do you handle URLs for
annual events like
"Ham Festival" editions?
Yes, indeed, it's not the most optimal.
We do tend to spin the texts inside,
but look, even so, we have some
very interesting search
results and rankings.
For example, "eating for free in Málaga"
—we're number one.
"Free concerts in Málaga"—number one.
"Town festivals in Málaga"—number one.
And then there are a lot of
searches where we're in the top five.
And sometimes, we start looking
for an event that's a bit,
I don't know, obscure or from
very small towns,
and we say, "Come on, let's search for
'The Day of the Mule in Arenas'
or whatever."
And we search for it, and the first
five results that come up are ours.
That shows how little attention
those small towns get—
it's just us occupying those positions.
But anyway,
we don't pay much
attention to the URLs.
Now I'll give you the duck.
Alright, more questions?
Do you think the Málaga
Provincial Council will ever take
an interest in you?
No, neither the Málaga
Provincial Council nor "Sabor a Málaga,"
nor Málaga Tourism,
because we've already knocked
on those doors in the past,
back when we almost gave up on this.
The work doesn't allow us to
dedicate more hours to it.
We didn't want the project to die.
And well, it's always
the same old talk: "Let's discuss it,"
but there's no budget.
They can pay us with invisibility.
Look, after 25 years working
on the web, invisibility?
No, thanks.
I'd rather stay independent,
have no commitments with anyone,
and publish whatever we want.
If someone sends us an event
about a bullfight, we won't publish it.
If someone sends us an event
about a hunting dog fair,
we won’t publish it either.
We have no commitments with anyone.
Just like if someone sends us
a super commercial event,
we won't publish that either.
Because if Ricky Martin is coming
to Starlite or Jennifer Lopez
is performing at Castillo de Fuengirola,
it's already going to be
announced everywhere.
We don’t need to promote that.
We focus on more local events,
especially free or low-cost ones.
We help towns promote
themselves for tourism;
they love hosting these kinds
of events to attract visitors.
The towns welcome us very warmly,
but with institutions? Zero success.
Thanks. I'll give you your duck now.
I have boy ducks and girl ducks.
Here you go.
Does anyone else want a duck?
Hi, I wanted to ask—Is there
a way to contribute to the project?
Do you have any
open-source code or similar?
We've shared an address
in case a town wants to send us a ham,
but we haven't received anything yet.
Sometimes, businesses offer
to place an ad, a banner,
or something like that, (
but committing to showing
ads all the time—well,
we just use AdSense and that’s it.
In terms of collaborations,
we found some guys
who made a book with
photos of the 103 towns,
and they let us use their photos
in exchange for credits and links.
Those kinds of collaborations
are always welcome.
I meant in terms of code
or something like that.
Do you try to automate anything you need?
The thing is, there's nowhere
we can scrape content from,
because this project started
precisely because
nothing similar existed.
Some bloggers post about
their region—like a blogger from
Axarquía posting about
events in Axarquía—
but sometimes they post them
after the event has already happened,
or they don’t post at all.
There's no centralized place
where we could automate things.
We also don’t want to automate
newsletters or anything like
that because people could
send us content that's
not appropriate.
And by "appropriate," I don’t mean
X-rated or anything, but content
that’s not relevant to our site.
But no, we haven’t considered
any other type of collaboration.
Thank you very much.
Am I being kicked out already?
A big round of applause for Rafa!
Thank you so much for your talk
and for taking on this
last-minute challenge
It turned out great.
On behalf of the organizers and
the WordCamp Granada group,
we have a small gift for you.
Thank you all so much for coming,
and thanks for inviting me.
Thanks a lot.
Now, we have one more talk and
then the group photo.