troubleshooting the blog builds
|
Before Width: | Height: | Size: 2.6 MiB After Width: | Height: | Size: 2.6 MiB |
|
Before Width: | Height: | Size: 2.2 MiB After Width: | Height: | Size: 2.2 MiB |
|
Before Width: | Height: | Size: 1.6 MiB After Width: | Height: | Size: 1.6 MiB |
|
Before Width: | Height: | Size: 1.9 MiB After Width: | Height: | Size: 1.9 MiB |
|
Before Width: | Height: | Size: 2.1 MiB After Width: | Height: | Size: 2.1 MiB |
|
Before Width: | Height: | Size: 1.3 MiB After Width: | Height: | Size: 1.3 MiB |
|
Before Width: | Height: | Size: 2.8 MiB After Width: | Height: | Size: 2.8 MiB |
|
Before Width: | Height: | Size: 1.0 MiB After Width: | Height: | Size: 1.0 MiB |
@@ -1,12 +1,3 @@
|
|||||||
---
|
|
||||||
title: "Best Off-Leash Areas for Dogs in Lagos (and Nearby)"
|
|
||||||
date: 2025-05-01
|
|
||||||
description: "Looking for off-leash areas for dogs in Lagos, Portugal? Discover the best spots for safe, enjoyable off-leash walks, plus what to watch out for."
|
|
||||||
category: Insights
|
|
||||||
readTime: "6 min"
|
|
||||||
live: true
|
|
||||||
---
|
|
||||||
|
|
||||||
### **Introduction**
|
### **Introduction**
|
||||||
|
|
||||||
Finding a good place to let your dog off-leash in Lagos isn’t always straightforward.
|
Finding a good place to let your dog off-leash in Lagos isn’t always straightforward.
|
||||||
@@ -23,9 +14,9 @@ Here are some of the best off-leash-friendly areas around Lagos, and how to choo
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## **1\. Mata Nacional de Barão de São João**
|
## **1. Mata Nacional de Barão de São João**
|
||||||
|
|
||||||
**Best for:** Most dogs
|
**Best for:** Most dogs
|
||||||
**Why it works:**
|
**Why it works:**
|
||||||
|
|
||||||
* Wide, open forest trails
|
* Wide, open forest trails
|
||||||
@@ -36,9 +27,9 @@ Ideal for dogs who need **space without isolation**
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## **2\. Praia da Bordeira (West Coast)**
|
## **2. Praia da Bordeira (West Coast)**
|
||||||
|
|
||||||
**Best for:** High-energy dogs
|
**Best for:** High-energy dogs
|
||||||
**Why it works:**
|
**Why it works:**
|
||||||
|
|
||||||
* Huge open beach
|
* Huge open beach
|
||||||
@@ -52,9 +43,9 @@ Ideal for dogs who need **space without isolation**
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## **3\. Ria de Alvor (Quiet Sections)**
|
## **3. Ria de Alvor (Quiet Sections)**
|
||||||
|
|
||||||
**Best for:** Lower-energy or calm dogs
|
**Best for:** Lower-energy or calm dogs
|
||||||
**Why it works:**
|
**Why it works:**
|
||||||
|
|
||||||
* Flat terrain
|
* Flat terrain
|
||||||
@@ -64,9 +55,9 @@ Avoid peak hours, it can get busy
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## **4\. Monchique Countryside**
|
## **4. Monchique Countryside**
|
||||||
|
|
||||||
**Best for:** Dogs needing low stimulation
|
**Best for:** Dogs needing low stimulation
|
||||||
**Why it works:**
|
**Why it works:**
|
||||||
|
|
||||||
* Quiet
|
* Quiet
|
||||||
@@ -77,7 +68,7 @@ Great for reactive or sensitive dogs
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## **5\. Local Countryside Trails (Hidden Gems)**
|
## **5. Local Countryside Trails (Hidden Gems)**
|
||||||
|
|
||||||
Often overlooked, but some of the best options.
|
Often overlooked, but some of the best options.
|
||||||
|
|
||||||
@@ -133,4 +124,3 @@ It’s to do it in a way that:
|
|||||||
Because the right environment makes all the difference.
|
Because the right environment makes all the difference.
|
||||||
|
|
||||||
<!-- **Want help finding the right trails for your dog? Download TailTrails here.** -->
|
<!-- **Want help finding the right trails for your dog? Download TailTrails here.** -->
|
||||||
|
|
||||||
@@ -1,13 +1,3 @@
|
|||||||
---
|
|
||||||
title: "How to Choose the Right Walk for Your Dog (Based on Their Personality and Needs)"
|
|
||||||
date: 2025-04-20
|
|
||||||
description: "Not all walks are equal. Learn how to choose the right environment for your dog based on energy, temperament, and needs."
|
|
||||||
category: Strategy
|
|
||||||
readTime: "5 min"
|
|
||||||
live: true
|
|
||||||
---
|
|
||||||
|
|
||||||
|
|
||||||
### **Introduction**
|
### **Introduction**
|
||||||
|
|
||||||
Choosing a walk for your dog often comes down to convenience.
|
Choosing a walk for your dog often comes down to convenience.
|
||||||
@@ -1,12 +1,3 @@
|
|||||||
---
|
|
||||||
title: "How to Give a Reactive Dog a Fulfilling Life (Without Avoiding the World)"
|
|
||||||
date: 2025-03-15
|
|
||||||
description: "Have a reactive dog? Learn how to give them a fulfilling life with the right environments, structure, and approach."
|
|
||||||
category: Insights
|
|
||||||
readTime: "7 min"
|
|
||||||
live: true
|
|
||||||
---
|
|
||||||
|
|
||||||
### **Introduction**
|
### **Introduction**
|
||||||
|
|
||||||
Living with a reactive dog can feel limiting.
|
Living with a reactive dog can feel limiting.
|
||||||
@@ -127,4 +118,3 @@ They just need the **right environments to thrive in**.
|
|||||||
And when you give them that, everything starts to shift.
|
And when you give them that, everything starts to shift.
|
||||||
|
|
||||||
<!-- **Want help finding the right trails for your dog? Download TailTrails here.** -->
|
<!-- **Want help finding the right trails for your dog? Download TailTrails here.** -->
|
||||||
|
|
||||||
@@ -1,12 +1,3 @@
|
|||||||
---
|
|
||||||
title: "Off-Leash Dog Rules in Portugal: What You Need to Know in 2026"
|
|
||||||
date: 2026-04-01
|
|
||||||
description: "Can you walk your dog off-leash in Portugal? Learn the rules, risks, and best practices for safe and legal off-leash walks."
|
|
||||||
category: Trends
|
|
||||||
readTime: "6 min"
|
|
||||||
live: true
|
|
||||||
---
|
|
||||||
|
|
||||||
### **Introduction**
|
### **Introduction**
|
||||||
|
|
||||||
Letting your dog off-leash is one of the simplest ways to give them freedom, enrichment, and a more natural experience.
|
Letting your dog off-leash is one of the simplest ways to give them freedom, enrichment, and a more natural experience.
|
||||||
@@ -21,14 +12,14 @@ Here’s what you need to know.
|
|||||||
|
|
||||||
In general, dogs in Portugal are expected to be **under control at all times in public spaces**.
|
In general, dogs in Portugal are expected to be **under control at all times in public spaces**.
|
||||||
|
|
||||||
That doesn’t always mean physically on a leash \- but it *does* mean:
|
That doesn’t always mean physically on a leash - but it *does* mean:
|
||||||
|
|
||||||
* Your dog must respond reliably to commands
|
* Your dog must respond reliably to commands
|
||||||
* They must not pose a risk to people, other animals, or property
|
* They must not pose a risk to people, other animals, or property
|
||||||
* They must not cause disturbance
|
* They must not cause disturbance
|
||||||
|
|
||||||
In many **urban areas**, leash use is effectively required.
|
In many **urban areas**, leash use is effectively required.
|
||||||
In more **rural or remote areas**, off-leash walking is more commonly accepted \- but still comes with responsibility.
|
In more **rural or remote areas**, off-leash walking is more commonly accepted - but still comes with responsibility.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -51,7 +42,7 @@ You’re more likely to safely and responsibly walk your dog off-leash in:
|
|||||||
* Remote coastal routes (away from crowds)
|
* Remote coastal routes (away from crowds)
|
||||||
* Open land where visibility is high
|
* Open land where visibility is high
|
||||||
|
|
||||||
However, even in these areas, it’s not just about permission \- it’s about suitability for your dog.
|
However, even in these areas, it’s not just about permission - it’s about suitability for your dog.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -75,7 +66,7 @@ Even if technically allowed, these environments can be:
|
|||||||
|
|
||||||
### **The Risks Most Dog Owners Overlook**
|
### **The Risks Most Dog Owners Overlook**
|
||||||
|
|
||||||
Many owners assume off-leash \= freedom.
|
Many owners assume off-leash = freedom.
|
||||||
|
|
||||||
But without the right environment, it can quickly become the opposite.
|
But without the right environment, it can quickly become the opposite.
|
||||||
|
|
||||||
@@ -131,4 +122,4 @@ Walking your dog off-leash in Portugal can be an awesome experience, when it’s
|
|||||||
Because it’s not just about whether dogs are allowed.
|
Because it’s not just about whether dogs are allowed.
|
||||||
It’s about whether the environment actually fits.
|
It’s about whether the environment actually fits.
|
||||||
|
|
||||||
<!-- **Want help finding the right trails for your dog? Download TailTrails here.** -->
|
<!-- **Want help finding the right trails for your dog? Download TailTrails here.** -->
|
||||||
@@ -1,12 +1,3 @@
|
|||||||
---
|
|
||||||
title: "The Importance of Variety in Your Dog’s Life (And How to Do It Right)"
|
|
||||||
date: 2025-02-28
|
|
||||||
description: "Dogs need more than the same daily walk. Learn why variety matters and how to safely introduce new environments into your dog’s routine."
|
|
||||||
category: Strategy
|
|
||||||
readTime: "5 min"
|
|
||||||
live: true
|
|
||||||
---
|
|
||||||
|
|
||||||
### **Introduction**
|
### **Introduction**
|
||||||
|
|
||||||
Most dogs live very predictable lives.
|
Most dogs live very predictable lives.
|
||||||
@@ -80,26 +71,26 @@ Can actually:
|
|||||||
|
|
||||||
## **How to Introduce Variety Properly**
|
## **How to Introduce Variety Properly**
|
||||||
|
|
||||||
### **1\. Start with similar environments**
|
### **1. Start with similar environments**
|
||||||
|
|
||||||
If your dog is used to quiet trails, try new *quiet* trails first.
|
If your dog is used to quiet trails, try new *quiet* trails first.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### **2\. Change one variable at a time**
|
### **2. Change one variable at a time**
|
||||||
|
|
||||||
* New location, same energy level
|
* New location, same energy level
|
||||||
* New terrain, same level of stimulation
|
* New terrain, same level of stimulation
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### **3\. Watch your dog’s response**
|
### **3. Watch your dog’s response**
|
||||||
|
|
||||||
Let their behaviour guide your decisions.
|
Let their behaviour guide your decisions.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### **4\. Build gradually**
|
### **4. Build gradually**
|
||||||
|
|
||||||
Confidence grows with positive experiences.
|
Confidence grows with positive experiences.
|
||||||
|
|
||||||
@@ -122,4 +113,3 @@ They need **better, more varied experiences**.
|
|||||||
Because when you get it right, even a simple walk can feel completely different.
|
Because when you get it right, even a simple walk can feel completely different.
|
||||||
|
|
||||||
<!-- **Want help finding the right trails for your dog? Download TailTrails here.** -->
|
<!-- **Want help finding the right trails for your dog? Download TailTrails here.** -->
|
||||||
|
|
||||||
@@ -0,0 +1,86 @@
|
|||||||
|
### **Introduction**
|
||||||
|
|
||||||
|
If you’re based in or visiting Lagos, you’re surrounded by some of the most beautiful walking routes in Europe.
|
||||||
|
|
||||||
|
But not all hikes are equal - especially when you’re walking with a dog.
|
||||||
|
|
||||||
|
Some are:
|
||||||
|
|
||||||
|
* Too exposed
|
||||||
|
* Too busy
|
||||||
|
* Too steep
|
||||||
|
* Or just not suited to your dog’s needs
|
||||||
|
|
||||||
|
Here are 10 of the best dog-friendly hikes in the Algarve, plus what makes each one a good fit.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## **1. Ponta da Piedade Coastal Walk**
|
||||||
|
|
||||||
|
**Best for:** Calm, confident dogs
|
||||||
|
**Type:** Cliffside / scenic
|
||||||
|
|
||||||
|
Incredible views, but:
|
||||||
|
|
||||||
|
* Narrow in parts
|
||||||
|
* High foot traffic
|
||||||
|
|
||||||
|
Best early morning or off-season
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## **2. Mata Nacional de Barão de São João**
|
||||||
|
|
||||||
|
**Best for:** Most dogs
|
||||||
|
**Type:** Forest / shaded
|
||||||
|
|
||||||
|
* Wide trails
|
||||||
|
* Plenty of shade
|
||||||
|
* Lower stimulation
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## **3. Ria de Alvor Nature Reserve**
|
||||||
|
|
||||||
|
**Best for:** Low to moderate energy dogs
|
||||||
|
**Type:** Boardwalk / coastal
|
||||||
|
|
||||||
|
* Flat and accessible
|
||||||
|
* Can be busy
|
||||||
|
* Limited shade
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## **How to Choose the Right One**
|
||||||
|
|
||||||
|
Instead of asking:
|
||||||
|
|
||||||
|
“Which hike is best?”
|
||||||
|
|
||||||
|
Ask:
|
||||||
|
|
||||||
|
“Which hike is right for my dog?”
|
||||||
|
|
||||||
|
Consider:
|
||||||
|
|
||||||
|
* Energy level
|
||||||
|
* Sociability
|
||||||
|
* Confidence
|
||||||
|
* Weather
|
||||||
|
* Time of day
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## **Final Thoughts**
|
||||||
|
|
||||||
|
The Algarve is full of incredible places to explore with your dog.
|
||||||
|
|
||||||
|
But the best walks aren’t just beautiful.
|
||||||
|
|
||||||
|
They’re the ones that:
|
||||||
|
|
||||||
|
* Suit your dog
|
||||||
|
* Feel comfortable
|
||||||
|
* And allow them to be at their best
|
||||||
|
|
||||||
|
<!-- **Want help finding the right trails for your dog? Download TailTrails here.** -->
|
||||||
@@ -0,0 +1,71 @@
|
|||||||
|
### **Introduction**
|
||||||
|
|
||||||
|
The Algarve is one of the best places in Europe to explore with your dog.
|
||||||
|
|
||||||
|
Cliffside trails.
|
||||||
|
Quiet forests.
|
||||||
|
Open countryside.
|
||||||
|
|
||||||
|
But beneath all that beauty, there are a few **less obvious risks** that many dog owners (especially newcomers) don’t see coming.
|
||||||
|
Knowing what to look out for can make the difference between a great walk and an emergency vet visit.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## **1. Pine Processionary Caterpillars (High Risk)**
|
||||||
|
|
||||||
|
These are one of the **most dangerous hazards** for dogs in Portugal.
|
||||||
|
|
||||||
|
They appear in:
|
||||||
|
|
||||||
|
* Pine forests
|
||||||
|
* Woodland trails
|
||||||
|
* Warmer months (typically late winter to spring)
|
||||||
|
|
||||||
|
### **Why they’re dangerous:**
|
||||||
|
|
||||||
|
Their tiny hairs contain a toxin that can cause:
|
||||||
|
|
||||||
|
* Severe swelling of the mouth and tongue
|
||||||
|
* Vomiting
|
||||||
|
* Difficulty breathing
|
||||||
|
* Tissue damage (in serious cases)
|
||||||
|
|
||||||
|
### **What to look for:**
|
||||||
|
|
||||||
|
* Caterpillars moving in a line (procession)
|
||||||
|
* Nests in pine trees (silk-like bundles)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## **2. Grass Seeds (Foxtails)**
|
||||||
|
|
||||||
|
Small, sharp, and incredibly problematic.
|
||||||
|
|
||||||
|
They’re common in:
|
||||||
|
|
||||||
|
* Dry grasslands
|
||||||
|
* Trail edges
|
||||||
|
* Late spring and summer
|
||||||
|
|
||||||
|
### **Why they’re dangerous:**
|
||||||
|
|
||||||
|
They can lodge in:
|
||||||
|
|
||||||
|
* Noses
|
||||||
|
* Ears
|
||||||
|
* Eyes
|
||||||
|
* Between toes
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## **Final Thoughts**
|
||||||
|
|
||||||
|
Walking your dog in the Algarve can be one of the best parts of living or visiting here.
|
||||||
|
|
||||||
|
But the best walks happen when you:
|
||||||
|
|
||||||
|
* Know what to look out for
|
||||||
|
* Choose environments intentionally
|
||||||
|
* Match the walk to your dog’s needs
|
||||||
|
|
||||||
|
<!-- **Want help finding the right trails for your dog? Download TailTrails here.** -->
|
||||||
@@ -1,159 +0,0 @@
|
|||||||
---
|
|
||||||
title: "Top 10 Hikes to do with your Dog in Lagos and the Algarve"
|
|
||||||
date: 2025-06-10
|
|
||||||
description: "Discover the best hikes in Lagos and the Algarve to take your dog on. From coastal trails to quiet forests, find the right walk for your dog."
|
|
||||||
category: Insights
|
|
||||||
readTime: "8 min"
|
|
||||||
live: true
|
|
||||||
---
|
|
||||||
|
|
||||||
### **Introduction**
|
|
||||||
|
|
||||||
If you’re based in or visiting Lagos, you’re surrounded by some of the most beautiful walking routes in Europe.
|
|
||||||
|
|
||||||
But not all hikes are equal \- especially when you’re walking with a dog.
|
|
||||||
|
|
||||||
Some are:
|
|
||||||
|
|
||||||
* Too exposed
|
|
||||||
* Too busy
|
|
||||||
* Too steep
|
|
||||||
* Or just not suited to your dog’s needs
|
|
||||||
|
|
||||||
Here are 10 of the best dog-friendly hikes in the Algarve, plus what makes each one a good fit.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## **1\. Ponta da Piedade Coastal Walk**
|
|
||||||
|
|
||||||
**Best for:** Calm, confident dogs
|
|
||||||
**Type:** Cliffside / scenic
|
|
||||||
|
|
||||||
Incredible views, but:
|
|
||||||
|
|
||||||
* Narrow in parts
|
|
||||||
* High foot traffic
|
|
||||||
|
|
||||||
Best early morning or off-season
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## **2\. Mata Nacional de Barão de São João**
|
|
||||||
|
|
||||||
**Best for:** Most dogs
|
|
||||||
**Type:** Forest / shaded
|
|
||||||
|
|
||||||
* Wide trails
|
|
||||||
* Plenty of shade
|
|
||||||
* Lower stimulation
|
|
||||||
|
|
||||||
One of the most versatile options near Lagos
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## **3\. Ria de Alvor Nature Reserve**
|
|
||||||
|
|
||||||
**Best for:** Low to moderate energy dogs
|
|
||||||
**Type:** Boardwalk / coastal
|
|
||||||
|
|
||||||
* Flat and accessible
|
|
||||||
* Can be busy
|
|
||||||
* Limited shade
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## **4\. Rocha da Pena (near Loulé)**
|
|
||||||
|
|
||||||
**Best for:** High-energy, confident dogs
|
|
||||||
**Type:** Rocky / inland
|
|
||||||
|
|
||||||
* More challenging terrain
|
|
||||||
* Great for adventurous dogs
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## **5\. Praia da Bordeira (West Coast)**
|
|
||||||
|
|
||||||
**Best for:** High-energy dogs
|
|
||||||
**Type:** Beach / open space
|
|
||||||
|
|
||||||
* Huge open areas
|
|
||||||
* Ideal for running
|
|
||||||
* Watch for wind \+ exposure
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## **6\. Monchique Forest Trails**
|
|
||||||
|
|
||||||
**Best for:** Hot days / sensitive dogs
|
|
||||||
**Type:** Mountain / forest
|
|
||||||
|
|
||||||
* Cooler temperatures
|
|
||||||
* Shaded routes
|
|
||||||
* Varied terrain
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## **7\. Lagos to Praia da Luz Walk**
|
|
||||||
|
|
||||||
**Best for:** Moderate energy dogs
|
|
||||||
**Type:** Coastal mix
|
|
||||||
|
|
||||||
* Combination of paths and views
|
|
||||||
* Can be busy in sections
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## **8\. Parque Natural do Sudoeste Alentejano**
|
|
||||||
|
|
||||||
**Best for:** Dogs needing space
|
|
||||||
**Type:** Wild / remote
|
|
||||||
|
|
||||||
* Less crowded
|
|
||||||
* More natural terrain
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## **9\. Seven Hanging Valleys Trail**
|
|
||||||
|
|
||||||
**Best for:** Experienced dogs only
|
|
||||||
**Type:** Cliffside
|
|
||||||
|
|
||||||
* Stunning but narrow
|
|
||||||
* Not suitable for reactive or unpredictable dogs
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## **How to Choose the Right One**
|
|
||||||
|
|
||||||
Instead of asking:
|
|
||||||
|
|
||||||
“Which hike is best?”
|
|
||||||
|
|
||||||
Ask:
|
|
||||||
|
|
||||||
“Which hike is right for my dog?”
|
|
||||||
|
|
||||||
Consider:
|
|
||||||
|
|
||||||
* Energy level
|
|
||||||
* Sociability
|
|
||||||
* Confidence
|
|
||||||
* Weather
|
|
||||||
* Time of day
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## **Final Thoughts**
|
|
||||||
|
|
||||||
The Algarve is full of incredible places to explore with your dog.
|
|
||||||
|
|
||||||
But the best walks aren’t just beautiful.
|
|
||||||
|
|
||||||
They’re the ones that:
|
|
||||||
|
|
||||||
* Suit your dog
|
|
||||||
* Feel comfortable
|
|
||||||
* And allow them to be at their best
|
|
||||||
|
|
||||||
<!-- **Want help finding the right trails for your dog? Download TailTrails here.** -->
|
|
||||||
@@ -1,201 +0,0 @@
|
|||||||
---
|
|
||||||
title: "Walking Your Dog in the Algarve: Hidden Dangers Every Owner Should Know"
|
|
||||||
date: 2025-07-05
|
|
||||||
description: "Walking your dog in the Algarve? Learn about hidden dangers like pine processionary caterpillars, grass seeds, heat, and more — plus how to keep your dog safe."
|
|
||||||
category: Tutorial
|
|
||||||
readTime: "7 min"
|
|
||||||
live: true
|
|
||||||
---
|
|
||||||
|
|
||||||
### **Introduction**
|
|
||||||
|
|
||||||
The Algarve is one of the best places in Europe to explore with your dog.
|
|
||||||
|
|
||||||
Cliffside trails.
|
|
||||||
Quiet forests.
|
|
||||||
Open countryside.
|
|
||||||
|
|
||||||
But beneath all that beauty, there are a few **less obvious risks** that many dog owners (especially newcomers) don’t see coming.
|
|
||||||
|
|
||||||
Knowing what to look out for can make the difference between a great walk and an emergency vet visit.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## **1\. Pine Processionary Caterpillars (High Risk)**
|
|
||||||
|
|
||||||
These are one of the **most dangerous hazards** for dogs in Portugal.
|
|
||||||
|
|
||||||
They appear in:
|
|
||||||
|
|
||||||
* Pine forests
|
|
||||||
* Woodland trails
|
|
||||||
* Warmer months (typically late winter to spring)
|
|
||||||
|
|
||||||
### **Why they’re dangerous:**
|
|
||||||
|
|
||||||
Their tiny hairs contain a toxin that can cause:
|
|
||||||
|
|
||||||
* Severe swelling of the mouth and tongue
|
|
||||||
* Vomiting
|
|
||||||
* Difficulty breathing
|
|
||||||
* Tissue damage (in serious cases)
|
|
||||||
|
|
||||||
### **What to look for:**
|
|
||||||
|
|
||||||
* Caterpillars moving in a line (procession)
|
|
||||||
* Nests in pine trees (silk-like bundles)
|
|
||||||
|
|
||||||
### **What to do:**
|
|
||||||
|
|
||||||
* Avoid pine-heavy areas during peak season
|
|
||||||
* Keep your dog close in these environments
|
|
||||||
* If contact happens: **go to a vet immediately**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## **2\. Grass Seeds (Foxtails)**
|
|
||||||
|
|
||||||
Small, sharp, and incredibly problematic.
|
|
||||||
|
|
||||||
They’re common in:
|
|
||||||
|
|
||||||
* Dry grasslands
|
|
||||||
* Trail edges
|
|
||||||
* Late spring and summer
|
|
||||||
|
|
||||||
### **Why they’re dangerous:**
|
|
||||||
|
|
||||||
They can lodge in:
|
|
||||||
|
|
||||||
* Noses
|
|
||||||
* Ears
|
|
||||||
* Eyes
|
|
||||||
* Between toes
|
|
||||||
|
|
||||||
And they don’t come out easily—they move deeper into the body.
|
|
||||||
|
|
||||||
### **Signs to watch for:**
|
|
||||||
|
|
||||||
* Sneezing repeatedly
|
|
||||||
* Licking paws
|
|
||||||
* Head shaking
|
|
||||||
* Sudden discomfort
|
|
||||||
|
|
||||||
### **Prevention:**
|
|
||||||
|
|
||||||
* Avoid overgrown paths
|
|
||||||
* Check your dog after walks
|
|
||||||
* Pay close attention to paws and ears
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## **3\. Heat and Sun Exposure**
|
|
||||||
|
|
||||||
The Algarve sun is intense, especially in summer.
|
|
||||||
|
|
||||||
Even when it doesn’t feel extreme to you, it can be too much for your dog.
|
|
||||||
|
|
||||||
### **Risks:**
|
|
||||||
|
|
||||||
* Overheating
|
|
||||||
* Dehydration
|
|
||||||
* Burnt paw pads
|
|
||||||
|
|
||||||
### **Safer approach:**
|
|
||||||
|
|
||||||
* Walk early morning or late evening
|
|
||||||
* Choose shaded routes (forests \> exposed cliffs)
|
|
||||||
* Always carry water
|
|
||||||
* Test the ground temperature before walking
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## **4\. Livestock and Wildlife**
|
|
||||||
|
|
||||||
Many rural trails pass through areas with:
|
|
||||||
|
|
||||||
* Wild cats
|
|
||||||
* Dog packs
|
|
||||||
* Goats
|
|
||||||
* Sheep
|
|
||||||
* Cattle
|
|
||||||
* Wildlife (including birds and small animals)
|
|
||||||
|
|
||||||
### **Why it matters:**
|
|
||||||
|
|
||||||
* Dogs with high prey drive may chase
|
|
||||||
* Farmers are protective of their animals
|
|
||||||
* Situations can escalate quickly
|
|
||||||
|
|
||||||
### **Best practice:**
|
|
||||||
|
|
||||||
* Keep your dog on-leash around animals
|
|
||||||
* Be aware of your surroundings
|
|
||||||
* Respect local land use
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## **5\. Cliffs and Unstable Terrain**
|
|
||||||
|
|
||||||
The Algarve coastline is stunning, but not always forgiving.
|
|
||||||
|
|
||||||
### **Risks:**
|
|
||||||
|
|
||||||
* Loose rocks
|
|
||||||
* Narrow paths
|
|
||||||
* Sudden drops
|
|
||||||
|
|
||||||
### **Important:**
|
|
||||||
|
|
||||||
Even confident dogs can misjudge terrain.
|
|
||||||
|
|
||||||
### **Safer approach:**
|
|
||||||
|
|
||||||
* Avoid narrow cliff paths with reactive or excitable dogs
|
|
||||||
* Keep distance from edges
|
|
||||||
* Choose wider, more stable trails when possible
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## **6\. High Dog Traffic Areas**
|
|
||||||
|
|
||||||
Some popular walking spots can be:
|
|
||||||
|
|
||||||
* Busy
|
|
||||||
* Unpredictable
|
|
||||||
* Overstimulating
|
|
||||||
|
|
||||||
This can be especially challenging for:
|
|
||||||
|
|
||||||
* Reactive dogs
|
|
||||||
* Nervous dogs
|
|
||||||
* Dogs in training
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## **Why Environment Matters More Than You Think**
|
|
||||||
|
|
||||||
Most of these risks aren’t just about location.
|
|
||||||
|
|
||||||
They’re about **fit**.
|
|
||||||
|
|
||||||
The same trail can be:
|
|
||||||
|
|
||||||
* Perfect for one dog
|
|
||||||
* Completely wrong for another
|
|
||||||
|
|
||||||
That’s why choosing where you walk isn’t just about what looks good—it’s about what actually works for your dog.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## **Final Thoughts**
|
|
||||||
|
|
||||||
Walking your dog in the Algarve can be one of the best parts of living or visiting here.
|
|
||||||
|
|
||||||
But the best walks happen when you:
|
|
||||||
|
|
||||||
* Know what to look out for
|
|
||||||
* Choose environments intentionally
|
|
||||||
* Match the walk to your dog’s needs
|
|
||||||
|
|
||||||
<!-- **Want help finding the right trails for your dog? Download TailTrails here.** -->
|
|
||||||
@@ -1,147 +0,0 @@
|
|||||||
---
|
|
||||||
title: "Why “Dog-Friendly” Isn’t Enough (And What Actually Matters)"
|
|
||||||
date: 2025-01-18
|
|
||||||
description: "“Dog-friendly” doesn’t always mean suitable. Learn what really makes a walk right for your dog, and how to choose better environments."
|
|
||||||
category: Insights
|
|
||||||
readTime: "5 min"
|
|
||||||
live: true
|
|
||||||
---
|
|
||||||
|
|
||||||
### **Introduction**
|
|
||||||
|
|
||||||
“Dog-friendly” is everywhere.
|
|
||||||
|
|
||||||
Dog-friendly cafés.
|
|
||||||
Dog-friendly beaches.
|
|
||||||
Dog-friendly trails.
|
|
||||||
|
|
||||||
But here’s the problem:
|
|
||||||
|
|
||||||
**Dog-friendly doesn’t mean right for your dog.**
|
|
||||||
|
|
||||||
And relying on that label alone is one of the mistakes dog owners make.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### **The Problem with “Dog-Friendly”**
|
|
||||||
|
|
||||||
The term sounds helpful, but it’s incredibly broad.
|
|
||||||
|
|
||||||
A place can be dog-friendly and still be:
|
|
||||||
|
|
||||||
* Overcrowded
|
|
||||||
* Loud and overstimulating
|
|
||||||
* Too narrow or restrictive
|
|
||||||
* Unsafe for certain temperaments
|
|
||||||
* Physically unsuitable for your dog
|
|
||||||
|
|
||||||
It tells you one thing:
|
|
||||||
|
|
||||||
Dogs are allowed.
|
|
||||||
|
|
||||||
It tells you nothing about:
|
|
||||||
|
|
||||||
Whether your dog will actually enjoy being there.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### **Every Dog Experiences the World Differently**
|
|
||||||
|
|
||||||
This is where most advice falls short.
|
|
||||||
|
|
||||||
Dogs aren’t interchangeable.
|
|
||||||
|
|
||||||
Some are:
|
|
||||||
|
|
||||||
* Highly social and confident
|
|
||||||
* Sensitive to noise and movement
|
|
||||||
* Reactive around other dogs
|
|
||||||
* Driven by scent or prey
|
|
||||||
* Recovering from injury
|
|
||||||
* Low energy or ageing
|
|
||||||
|
|
||||||
The same environment can feel:
|
|
||||||
|
|
||||||
* Exciting for one dog
|
|
||||||
* Overwhelming for another
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### **What Actually Makes a Walk “Good”**
|
|
||||||
|
|
||||||
A good walk isn’t about distance or popularity.
|
|
||||||
|
|
||||||
It’s about **fit**.
|
|
||||||
|
|
||||||
The right walk considers:
|
|
||||||
|
|
||||||
* **Dog traffic** – busy vs quiet
|
|
||||||
* **Space** – open vs narrow
|
|
||||||
* **Terrain** – soft ground vs hard surfaces
|
|
||||||
* **Exposure** – shaded vs direct sun
|
|
||||||
* **Environment** – forest, beach, rural, urban
|
|
||||||
* **Stimulation level** – predictable vs chaotic
|
|
||||||
|
|
||||||
When these align with your dog’s needs, everything changes.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### **Signs You’re Choosing the Wrong Environments**
|
|
||||||
|
|
||||||
You might notice:
|
|
||||||
|
|
||||||
* Your dog becomes overstimulated or reactive
|
|
||||||
* They seem stressed or hyper-alert
|
|
||||||
* They pull, bark, or shut down
|
|
||||||
* Walks feel unpredictable or tense
|
|
||||||
|
|
||||||
It’s not always a training issue.
|
|
||||||
|
|
||||||
Often, it’s an **environment mismatch**.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### **Why This Matters More Than Ever**
|
|
||||||
|
|
||||||
Modern dog ownership has shifted.
|
|
||||||
|
|
||||||
Dogs are:
|
|
||||||
|
|
||||||
* Living in more urban environments
|
|
||||||
* Exposed to more stimulation
|
|
||||||
* Expected to behave in unnatural settings
|
|
||||||
|
|
||||||
That means we need to be more intentional about:
|
|
||||||
|
|
||||||
Where we take them \- not just how often
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### **A Better Way to Think About Walks**
|
|
||||||
|
|
||||||
Instead of asking:
|
|
||||||
|
|
||||||
“Is this place dog-friendly?”
|
|
||||||
|
|
||||||
Ask:
|
|
||||||
|
|
||||||
“Is this place right for my dog?”
|
|
||||||
|
|
||||||
That shift alone can:
|
|
||||||
|
|
||||||
* Reduce stress
|
|
||||||
* Improve behaviour
|
|
||||||
* Increase confidence
|
|
||||||
* Create better shared experiences
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### **Final Thoughts**
|
|
||||||
|
|
||||||
Your dog doesn’t need more places.
|
|
||||||
|
|
||||||
They need the **right places**.
|
|
||||||
|
|
||||||
Because when the environment fits, everything else gets easier.
|
|
||||||
|
|
||||||
<!-- **Want help finding the right trails for your dog? Download TailTrails here.** -->
|
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
// Generated list of filenames in the `public/blog-images` folder.
|
||||||
|
// If you add or remove images, update this list accordingly.
|
||||||
|
const BLOG_IMAGE_FILENAMES = [
|
||||||
|
'afra-ramio-cp2HCVzguw4-unsplash.jpg',
|
||||||
|
'dagmar-klauzova-afBc-k2luH4-unsplash.jpg',
|
||||||
|
'eric-ward-ISg37AI2A-s-unsplash.jpg',
|
||||||
|
'jamie-street-m4BkRRprvP0-unsplash.jpg',
|
||||||
|
'joe-caione-qO-PIF84Vxg-unsplash.jpg',
|
||||||
|
'rafaella-waasdorp-EkzMdwI_YE4-unsplash.jpg',
|
||||||
|
'tatum-bergen-Vt3odrTM4cQ-unsplash.jpg',
|
||||||
|
'troy-bridges-lbRNtUZPXXQ-unsplash.jpg',
|
||||||
|
];
|
||||||
|
|
||||||
|
export default BLOG_IMAGE_FILENAMES;
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
export type BlogMeta = {
|
||||||
|
title?: string;
|
||||||
|
date?: string;
|
||||||
|
description?: string;
|
||||||
|
category?: string;
|
||||||
|
readTime?: string;
|
||||||
|
live?: boolean;
|
||||||
|
};
|
||||||
|
|
||||||
|
const meta: Record<string, BlogMeta> = {
|
||||||
|
"best-off-leash-areas-for-dogs-in-lagos-and-nearby": {
|
||||||
|
title: "Best Off-Leash Areas for Dogs in Lagos (and Nearby)",
|
||||||
|
date: "2024-05-01",
|
||||||
|
description: "Looking for off-leash areas for dogs in Lagos, Portugal? Discover the best spots for safe, enjoyable off-leash walks, plus what to watch out for.",
|
||||||
|
category: "Insights",
|
||||||
|
readTime: "6 min",
|
||||||
|
live: true,
|
||||||
|
},
|
||||||
|
"how-to-choose-the-right-walk-for-your-dog-based-on-their-personality-and-needs": {
|
||||||
|
title: "How to Choose the Right Walk for Your Dog (Based on Their Personality and Needs)",
|
||||||
|
date: "2024-04-20",
|
||||||
|
description: "Not all walks are equal. Learn how to choose the right environment for your dog based on energy, temperament, and needs.",
|
||||||
|
category: "Strategy",
|
||||||
|
readTime: "5 min",
|
||||||
|
live: true,
|
||||||
|
},
|
||||||
|
"how-to-give-a-reactive-dog-a-fulfilling-life-without-avoiding-the-world": {
|
||||||
|
title: "How to Give a Reactive Dog a Fulfilling Life (Without Avoiding the World)",
|
||||||
|
date: "2024-03-15",
|
||||||
|
description: "Have a reactive dog? Learn how to give them a fulfilling life with the right environments, structure, and approach.",
|
||||||
|
category: "Insights",
|
||||||
|
readTime: "7 min",
|
||||||
|
live: true,
|
||||||
|
},
|
||||||
|
"off-leash-dog-rules-in-portugal-what-you-need-to-know-in-2026": {
|
||||||
|
title: "Off-Leash Dog Rules in Portugal: What You Need to Know in 2026",
|
||||||
|
date: "2026-04-01",
|
||||||
|
description: "Can you walk your dog off-leash in Portugal? Learn the rules, risks, and best practices for safe and legal off-leash walks.",
|
||||||
|
category: "Trends",
|
||||||
|
readTime: "6 min",
|
||||||
|
live: true,
|
||||||
|
},
|
||||||
|
"top-10-hikes-to-do-with-your-dog-in-lagos-and-the-algarve": {
|
||||||
|
title: "Top 10 Hikes to do with your Dog in Lagos and the Algarve",
|
||||||
|
date: "2024-06-10",
|
||||||
|
description: "Discover the best hikes in Lagos and the Algarve to take your dog on. From coastal trails to quiet forests, find the right walk for your dog.",
|
||||||
|
category: "Insights",
|
||||||
|
readTime: "8 min",
|
||||||
|
live: true,
|
||||||
|
},
|
||||||
|
"walking-your-dog-in-the-algarve-hidden-dangers-every-owner-should-know": {
|
||||||
|
title: "Walking Your Dog in the Algarve: Hidden Dangers Every Owner Should Know",
|
||||||
|
date: "2024-07-05",
|
||||||
|
description: "Walking your dog in the Algarve? Learn about hidden dangers like pine processionary caterpillars, grass seeds, heat, and more — plus how to keep your dog safe.",
|
||||||
|
category: "Tutorial",
|
||||||
|
readTime: "7 min",
|
||||||
|
live: true,
|
||||||
|
},
|
||||||
|
"the-importance-of-variety-in-your-dogs-life-and-how-to-do-it-right": {
|
||||||
|
title: "The Importance of Variety in Your Dog’s Life (And How to Do It Right)",
|
||||||
|
date: "2024-02-28",
|
||||||
|
description: "Dogs need more than the same daily walk. Learn why variety matters and how to safely introduce new environments into your dog’s routine.",
|
||||||
|
category: "Strategy",
|
||||||
|
readTime: "5 min",
|
||||||
|
live: true,
|
||||||
|
},
|
||||||
|
"why-dog-friendly-isn-t-enough-and-what-actually-matters": {
|
||||||
|
title: "Why “Dog-Friendly” Isn’t Enough (And What Actually Matters)",
|
||||||
|
date: "2024-01-18",
|
||||||
|
description: "“Dog-friendly” doesn’t always mean suitable. Learn what really makes a walk right for your dog, and how to choose better environments.",
|
||||||
|
category: "Insights",
|
||||||
|
readTime: "5 min",
|
||||||
|
live: true,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export default meta;
|
||||||
@@ -9,6 +9,8 @@ export type BlogPost = {
|
|||||||
live?: boolean;
|
live?: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
import meta from './blogMeta';
|
||||||
|
|
||||||
function slugify(name: string) {
|
function slugify(name: string) {
|
||||||
return name
|
return name
|
||||||
.toLowerCase()
|
.toLowerCase()
|
||||||
@@ -41,33 +43,52 @@ function parseFrontmatter(raw: string) {
|
|||||||
return { fm, content };
|
return { fm, content };
|
||||||
}
|
}
|
||||||
|
|
||||||
// Import all markdown files from the assets raw-blogs folder as raw strings
|
|
||||||
const modules = import.meta.glob('../assets/raw-blogs/*.md', { eager: true, as: 'raw' }) as Record<string, string>;
|
|
||||||
|
|
||||||
const posts = Object.entries(modules).map(([path, raw]) => {
|
let _postsCache: BlogPost[] | null = null;
|
||||||
const file = path.split('/').pop()!;
|
|
||||||
const slug = slugify(file);
|
|
||||||
const { fm, content } = parseFrontmatter(raw);
|
|
||||||
return {
|
|
||||||
slug,
|
|
||||||
title: fm.title ?? file.replace(/\.md$/, ''),
|
|
||||||
date: fm.date,
|
|
||||||
description: fm.description,
|
|
||||||
content,
|
|
||||||
category: fm.category,
|
|
||||||
readTime: fm.readTime,
|
|
||||||
live: typeof fm.live === 'boolean' ? fm.live : fm.live === 'true',
|
|
||||||
} as BlogPost;
|
|
||||||
}).sort((a, b) => {
|
|
||||||
const da = a.date ?? '';
|
|
||||||
const db = b.date ?? '';
|
|
||||||
return db.localeCompare(da);
|
|
||||||
});
|
|
||||||
|
|
||||||
export function getAllPosts(): BlogPost[] {
|
async function loadPosts(): Promise<BlogPost[]> {
|
||||||
return posts;
|
if (_postsCache) return _postsCache;
|
||||||
|
|
||||||
|
const slugs = Object.keys(meta);
|
||||||
|
const results: BlogPost[] = [];
|
||||||
|
for (const slug of slugs) {
|
||||||
|
try {
|
||||||
|
const url = `/raw-blogs/${slug}.md`;
|
||||||
|
const res = await fetch(url);
|
||||||
|
const raw = await res.text();
|
||||||
|
const { fm, content } = parseFrontmatter(raw);
|
||||||
|
const merged = { ...(meta[slug] || {}), ...fm } as Record<string, any>;
|
||||||
|
results.push({
|
||||||
|
slug,
|
||||||
|
title: merged.title ?? slug,
|
||||||
|
date: merged.date,
|
||||||
|
description: merged.description,
|
||||||
|
content,
|
||||||
|
category: merged.category,
|
||||||
|
readTime: merged.readTime,
|
||||||
|
live: typeof merged.live === 'boolean' ? merged.live : merged.live === 'true',
|
||||||
|
} as BlogPost);
|
||||||
|
} catch (e) {
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
|
console.warn('Failed to load blog for slug:', slug, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
results.sort((a, b) => {
|
||||||
|
const da = a.date ?? '';
|
||||||
|
const db = b.date ?? '';
|
||||||
|
return db.localeCompare(da);
|
||||||
|
});
|
||||||
|
|
||||||
|
_postsCache = results;
|
||||||
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getPostBySlug(slug: string): BlogPost | undefined {
|
export async function getAllPosts(): Promise<BlogPost[]> {
|
||||||
return posts.find((p) => p.slug === slug);
|
return await loadPosts();
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function getPostBySlug(slug: string): Promise<BlogPost | undefined> {
|
||||||
|
const all = await loadPosts();
|
||||||
|
return all.find((p) => p.slug === slug);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import { clsx, type ClassValue } from "clsx";
|
import { clsx, type ClassValue } from "clsx";
|
||||||
import { twMerge } from "tailwind-merge";
|
import { twMerge } from "tailwind-merge";
|
||||||
|
import BLOG_IMAGE_FILENAMES from './blogImages';
|
||||||
|
|
||||||
export function cn(...inputs: ClassValue[]) {
|
export function cn(...inputs: ClassValue[]) {
|
||||||
return twMerge(clsx(inputs));
|
return twMerge(clsx(inputs));
|
||||||
@@ -16,9 +17,15 @@ export function getUnsplashImage(query: string, width = 1200, height = 675, seed
|
|||||||
return `https://source.unsplash.com/${width}x${height}/?${q}${sig}`;
|
return `https://source.unsplash.com/${width}x${height}/?${q}${sig}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load local blog images (as URLs) from the assets folder.
|
// Load local blog images (as URLs) from the public folder root.
|
||||||
const _blogImageModules = import.meta.glob('../assets/blog-images/*', { eager: true, as: 'url' }) as Record<string, string>;
|
const _blogImageModules = import.meta.glob('/blog-images/*', { eager: true, query: '?url', import: 'default' }) as Record<string, string>;
|
||||||
const _blogImageUrls = Object.values(_blogImageModules);
|
let _blogImageUrls = Object.values(_blogImageModules);
|
||||||
|
|
||||||
|
// Fallback: if the glob didn't return anything (public assets may not be importable),
|
||||||
|
// construct URLs from known filenames in the `public/blog-images` folder.
|
||||||
|
if (!_blogImageUrls || _blogImageUrls.length === 0) {
|
||||||
|
_blogImageUrls = BLOG_IMAGE_FILENAMES.map((n) => `/blog-images/${n}`);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Pick a local blog image by numeric index. Images are assigned in order.
|
* Pick a local blog image by numeric index. Images are assigned in order.
|
||||||
|
|||||||
@@ -29,18 +29,21 @@ const BlogList = () => {
|
|||||||
setLoading(true);
|
setLoading(true);
|
||||||
setError(null);
|
setError(null);
|
||||||
|
|
||||||
try {
|
const load = async () => {
|
||||||
const all = getAllPosts();
|
try {
|
||||||
if (!active) return;
|
const all = await getAllPosts();
|
||||||
// If frontmatter contains `live` flag, respect it; otherwise show all
|
if (!active) return;
|
||||||
const filtered = isPreview ? all : (all as any).filter ? (all as any).filter((p: any) => p.live !== false) : all;
|
const filtered = isPreview ? all : all.filter((p: any) => p.live !== false);
|
||||||
setPosts(filtered as BlogPost[]);
|
setPosts(filtered as BlogPost[]);
|
||||||
} catch (err: any) {
|
} catch (err: any) {
|
||||||
setError(err?.message || 'Failed to load posts.');
|
if (!active) return;
|
||||||
} finally {
|
setError(err?.message || 'Failed to load posts.');
|
||||||
if (active) setLoading(false);
|
} finally {
|
||||||
}
|
if (active) setLoading(false);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void load();
|
||||||
return () => {
|
return () => {
|
||||||
active = false;
|
active = false;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -16,13 +16,21 @@ const BlogPost = () => {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!slug) return;
|
if (!slug) return;
|
||||||
const p = getPostBySlug(slug);
|
let active = true;
|
||||||
setPost(p);
|
const load = async () => {
|
||||||
if (p) {
|
const p = await getPostBySlug(slug);
|
||||||
const posts = getAllPosts();
|
if (!active) return;
|
||||||
const idx = posts.findIndex((x) => x.slug === p.slug);
|
setPost(p);
|
||||||
setIndex(idx >= 0 ? idx : undefined);
|
if (p) {
|
||||||
}
|
const posts = await getAllPosts();
|
||||||
|
const idx = posts.findIndex((x) => x.slug === p.slug);
|
||||||
|
setIndex(idx >= 0 ? idx : undefined);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
void load();
|
||||||
|
return () => {
|
||||||
|
active = false;
|
||||||
|
};
|
||||||
}, [slug]);
|
}, [slug]);
|
||||||
|
|
||||||
if (!post) {
|
if (!post) {
|
||||||
|
|||||||