chore: neutralize comiida demo prose -> generic placeholder content

Rewrote the sample pages/components to niche-neutral placeholder copy so the
base carries no Medellín/restaurant/author-specific content:
- about, faq, services  -> generic placeholder pages (structure preserved)
- index hero, Footer, Newsletter, contact, 404, BaseLayout  -> neutral copy

app/src is now free of comiida/medellin/carlos references; build = 13 pages, Complete.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SYHWLHihq3v9nxNwoPCKSn
This commit is contained in:
Carlos Arias 2026-07-04 23:13:55 +00:00
parent 92fa6c9140
commit 0fcf707a17
9 changed files with 52 additions and 115 deletions

View file

@ -44,7 +44,7 @@ const { flush = false } = Astro.props;
</div>
<div class="border-t border-border/60">
<div class="mx-auto flex max-w-6xl flex-col items-start justify-between gap-2 px-5 py-5 text-xs text-muted-foreground sm:flex-row sm:items-center">
<div>&copy; {new Date().getFullYear()} {SITE.name}. Dining in Medellín.</div>
<div>&copy; {new Date().getFullYear()} {SITE.name}.</div>
<div>Set in Fraunces &amp; Inter.</div>
</div>
</div>

View file

@ -6,7 +6,7 @@ const { compact = false } = Astro.props;
compact ? (
<div>
<div class="text-xs font-medium uppercase tracking-wider text-muted-foreground">Newsletter</div>
<p class="mt-2 text-sm text-muted-foreground">Medellín dining in your inbox — new guides and openings.</p>
<p class="mt-2 text-sm text-muted-foreground">New posts in your inbox.</p>
<form data-newsletter-form class="mt-3 flex gap-2">
<input
type="email"
@ -24,9 +24,9 @@ const { compact = false } = Astro.props;
) : (
<section data-newsletter-cta class="border-t border-border/60 pt-16 pb-10">
<div class="mx-auto max-w-2xl px-5 text-center">
<h2 class="font-serif text-3xl font-semibold tracking-tight sm:text-4xl">Eat well in Medellín.</h2>
<h2 class="font-serif text-3xl font-semibold tracking-tight sm:text-4xl">Stay in the loop.</h2>
<p class="mt-3 text-muted-foreground">
One email when it&rsquo;s worth it &mdash; new restaurant guides, openings, and data-driven dining picks for Medellín.
One email when it&rsquo;s worth it &mdash; new posts and updates, no spam.
</p>
<form data-newsletter-form class="mx-auto mt-6 flex max-w-md flex-col gap-2 sm:flex-row">
<input

View file

@ -6,7 +6,7 @@ import DevConsole from "../components/DevConsole.astro";
import { SITE, imageSrc } from "../lib/blog-data.js";
const {
title = `${SITE.name} - Medellín's restaurant scene for expats, nomads & travelers`,
title = `${SITE.name}`,
description = SITE.description,
canonical,
ogType = "website",

View file

@ -2,7 +2,7 @@
import BaseLayout from "../layouts/BaseLayout.astro";
---
<BaseLayout title="Page not found - Comiida" description="The page could not be found.">
<BaseLayout title="Page not found" description="The page could not be found.">
<div class="mx-auto max-w-2xl px-5 py-32 text-center">
<div class="font-serif text-7xl font-semibold tracking-tight">404</div>
<h1 class="mt-4 font-serif text-2xl font-semibold">Lost in the margins</h1>

View file

@ -6,7 +6,7 @@ import { SITE, authors } from "../lib/blog-data.js";
<BaseLayout
title={`About - ${SITE.name}`}
description={`${SITE.name} is a fully autonomous, AI-run restaurant publication for Medellín — researched, written, illustrated, and SEO-managed every day by a system of agents built by engineer Carlos Arias.`}
description={`About ${SITE.name} — who we are and what we cover.`}
canonical="/about"
>
<div class="mx-auto max-w-3xl px-5 py-12">
@ -15,35 +15,29 @@ import { SITE, authors } from "../lib/blog-data.js";
<header class="mt-6">
<div class="text-xs font-medium uppercase tracking-[0.2em] text-primary">About</div>
<h1 class="mt-2 font-serif text-5xl font-semibold leading-[1.05] tracking-tight">
A restaurant publication that runs itself.
About {SITE.name}.
</h1>
</header>
<div class="prose-article mt-10">
<p>
{SITE.name} is an experiment in fully autonomous publishing. Every part of this site &mdash; the research, the writing, the cover images, the SEO, even the editorial calendar &mdash; is produced and managed by a system of AI agents that run on their own, every single day. No human writes the articles.
This is placeholder copy for your About page. Describe what {SITE.name} is,
who it&rsquo;s for, and why it exists. Edit this in <code>app/src/pages/about.astro</code>.
</p>
<h2 id="what-we-do">What we do</h2>
<p>
Summarize what visitors will find here &mdash; the topics you cover, the value
you offer, and what makes your site worth their time.
</p>
<h2 id="how-it-works">How it works</h2>
<p>Each day, with no one at the keyboard, the agents:</p>
<ul>
<li>scan for timely Medellín food news and new openings, and keep an evergreen topic calendar stocked;</li>
<li>write each article to SEO and EEAT standards, with real, linked sources;</li>
<li>generate an original cover illustration;</li>
<li>audit their own work against a quality &amp; SEO rubric &mdash; and revise it until it passes;</li>
<li>then publish on a schedule.</li>
</ul>
<h2 id="honesty">Honest by design</h2>
<p>
Quality and honesty matter even when no human is in the loop. The agents work from real, citable signals &mdash; aggregate ratings, published menus and prices, awards, and local press &mdash; never invented first-hand experiences, and every factual claim links to its source. Cover images are AI-generated illustrations, always labeled as such.
</p>
<h2 id="who-built-it">Who built it</h2>
<p>
{SITE.name} was built by Carlos Arias, an AI engineer. He doesn&rsquo;t write the articles &mdash; he built the agents that do. {SITE.name} is his passion project: an experiment in how far autonomous, agentic publishing can go, pointed at a subject worth covering &mdash; Medellín&rsquo;s restaurant scene, for the English-speaking expats, nomads, and travelers trying to figure out where to eat.
If your site uses the content pipeline or other automation, explain it here.
Otherwise, use this space to describe your process, standards, or approach.
</p>
</div>
<section class="mt-12 border-t border-border pt-10">
<h2 class="font-serif text-2xl font-semibold tracking-tight">The engineer behind Comiida</h2>
<h2 class="font-serif text-2xl font-semibold tracking-tight">The people behind {SITE.name}</h2>
<div class="mt-6 grid gap-6 sm:grid-cols-2 lg:grid-cols-3">
{
authors.map((author) => (

View file

@ -17,7 +17,7 @@ import { SITE } from "../lib/blog-data.js";
<div class="text-xs font-medium uppercase tracking-[0.2em] text-primary">Contact</div>
<h1 class="mt-2 font-serif text-5xl font-semibold tracking-tight">Say hello.</h1>
<p class="mt-4 max-w-xl text-muted-foreground">
A restaurant tip, a correction, or a question about where to eat in Medellín. We read everything and reply to most of it.
A tip, a correction, or a question. We read everything and reply to most of it.
</p>
</header>
@ -48,12 +48,12 @@ import { SITE } from "../lib/blog-data.js";
<div>
<div class="text-xs font-medium uppercase tracking-wider text-muted-foreground">Elsewhere</div>
<ul class="mt-3 space-y-3 text-sm">
<li><a href="https://x.com/hicarlosarias" class="flex items-center gap-2 hover:text-primary"><Icon name="twitter" class="h-3.5 w-3.5" /> @hicarlosarias</a></li>
<li><a href="https://x.com/" class="flex items-center gap-2 hover:text-primary"><Icon name="twitter" class="h-3.5 w-3.5" /> @yourhandle</a></li>
<li><a href="/rss.xml" class="flex items-center gap-2 hover:text-primary"><Icon name="rss" class="h-3.5 w-3.5" /> RSS feed</a></li>
</ul>
</div>
<div>
<div class="text-xs font-medium uppercase tracking-wider text-muted-foreground">Restaurant tips</div>
<div class="text-xs font-medium uppercase tracking-wider text-muted-foreground">Tips</div>
<p class="mt-2 text-sm text-muted-foreground">Know a new opening or an underrated spot? Send it our way — we factor reader tips into our guides and news roundups.</p>
</div>
</aside>

View file

@ -4,38 +4,19 @@ import Breadcrumbs from "../components/Breadcrumbs.astro";
import { SITE } from "../lib/blog-data.js";
// Plain-text answers so the visible content exactly matches the FAQPage schema.
// Replace these placeholders with your own questions in app/src/pages/faq.astro.
const faqs = [
{
q: "Is the tap water safe to drink in Medellín?",
a: "Yes. Medellín's utility, EPM, treats the city's water to a potable standard, and most residents drink it straight from the tap. This is unusual for Latin America and is one reason street food and ice here are lower-risk than in many nearby destinations.",
q: "What is this site about?",
a: "Replace this with a short description of what your site covers and who it is for.",
},
{
q: "Is street food safe to eat in Medellín?",
a: "Generally yes, with a few habits: follow the queues (high turnover means fresher food), order things cooked to order and served hot, and be a little cautious with raw preparations in your first days while your stomach adjusts.",
q: "How often is it updated?",
a: "Tell visitors how frequently you publish and what they can expect from new content.",
},
{
q: "Do I need to tip at restaurants in Medellín?",
a: "Most sit-down restaurants add a voluntary 10% service charge (propina voluntaria) to the bill. You'll usually be asked if you want to include it; you can accept, decline, or adjust it. Tipping beyond that is appreciated but not expected.",
},
{
q: "Do restaurants in Medellín have English menus?",
a: "In the tourist- and expat-heavy areas — El Poblado, Provenza, and parts of Laureles — many places have English menus or English-speaking staff. In more local neighborhoods, expect Spanish-only menus, so a translation app helps.",
},
{
q: "Can I pay by card, or do I need cash?",
a: "Cards are widely accepted at sit-down restaurants and cafés in El Poblado, Provenza, and Laureles. Carry some cash (Colombian pesos) for street food, market stalls, small family-run spots, and tips.",
},
{
q: "Which neighborhoods are best for eating out?",
a: "El Poblado and Provenza for upscale and international dining, Laureles for a more local, better-value scene, and Envigado and Sabaneta for traditional Paisa food. Each has a distinct character worth exploring.",
},
{
q: "What are typical restaurant hours?",
a: "Lunch runs roughly 123pm, when many places serve an affordable set menu (menú del día). Dinner is usually 710pm. Some kitchens close between services, and a number of restaurants close on Sundays or Mondays, so it's worth checking ahead.",
},
{
q: "Do I need a reservation?",
a: "For the city's top and fine-dining restaurants, yes — especially on weekends. For cafés, casual spots, and most neighborhood restaurants, you can simply walk in.",
q: "How can I get in touch?",
a: "Point people to your contact page or email, and update this answer to match how you prefer to be reached.",
},
];
@ -52,8 +33,8 @@ const jsonLd = {
---
<BaseLayout
title={`Dining in Medellín: FAQ - ${SITE.name}`}
description="Common questions about eating out in Medellín — tap water, tipping, street food, neighborhoods, hours, and more — answered for English-speaking visitors."
title={`FAQ - ${SITE.name}`}
description={`Frequently asked questions about ${SITE.name}.`}
canonical="/faq"
jsonLd={jsonLd}
>
@ -63,11 +44,10 @@ const jsonLd = {
<header class="mt-6">
<div class="text-xs font-medium uppercase tracking-[0.2em] text-primary">FAQ</div>
<h1 class="mt-2 font-serif text-4xl font-semibold tracking-tight sm:text-5xl">
Dining in Medellín: FAQ
Frequently asked questions
</h1>
<p class="mt-4 max-w-xl text-muted-foreground">
Quick, practical answers to the questions English-speaking visitors ask most about eating
out in Medellín.
Quick answers to common questions. Edit these in <code>app/src/pages/faq.astro</code>.
</p>
</header>

View file

@ -59,13 +59,13 @@ const jsonLd = {
<div class="relative mx-auto flex min-h-[calc(100svh-6rem)] max-w-6xl items-center px-5 py-20 sm:min-h-[680px] sm:py-24">
<div class="max-w-4xl text-white drop-shadow-[0_1px_18px_rgba(0,0,0,0.28)]">
<h1 class="font-serif text-[2.5rem] font-medium leading-[1.02] tracking-[-0.02em] sm:text-6xl lg:text-7xl">
Medellín&rsquo;s
<span class="italic text-white"> restaurants</span>,
<span class="italic text-white"> food news</span>, and
<span class="italic text-white"> where to eat</span>.
Fresh
<span class="italic text-white"> stories</span>,
<span class="italic text-white"> guides</span>, and
<span class="italic text-white"> ideas</span>.
</h1>
<p class="mt-8 max-w-xl text-lg leading-relaxed text-white/86">
Guides, openings, and data-driven dining picks for English-speaking expats, nomads, and travelers &mdash; researched carefully and updated often.
Your homepage hero copy goes here &mdash; describe what {SITE.name} offers and who it&rsquo;s for. Edit it in app/src/pages/index.astro.
</p>
<div class="mt-10 flex flex-wrap items-center gap-x-8 gap-y-4">
<a

View file

@ -6,7 +6,7 @@ import { SITE } from "../lib/blog-data.js";
<BaseLayout
title={`Services - ${SITE.name}`}
description="Work with Comiida: restaurant guides, sponsored editorial features, and local food consulting for businesses operating in Medellín."
description={`Work with ${SITE.name} — an overview of what we offer.`}
canonical="/services"
>
<div class="mx-auto max-w-3xl px-5 py-12">
@ -15,86 +15,49 @@ import { SITE } from "../lib/blog-data.js";
<header class="mt-6">
<div class="text-xs font-medium uppercase tracking-[0.2em] text-primary">Work with us</div>
<h1 class="mt-2 font-serif text-5xl font-semibold leading-[1.05] tracking-tight">
Reach Medellín's food-curious expats, nomads, and travelers.
What we offer.
</h1>
</header>
<div class="prose-article mt-10">
<p>
Comiida is the English-language guide to eating in Medellín. Our readers are expats settling in,
digital nomads on extended stays, and travelers planning their first trip &mdash; people actively
deciding where to eat, drink, and spend. If you want to be part of that conversation, here is how
we can work together.
This is a placeholder Services page. Describe how visitors can work with
{SITE.name}, or delete this page if you don&rsquo;t need it. Edit it in
<code>app/src/pages/services.astro</code>.
</p>
</div>
<section class="mt-12 border-t border-border pt-10">
<div class="text-xs font-medium uppercase tracking-[0.2em] text-primary">01</div>
<h2 class="mt-2 font-serif text-3xl font-semibold tracking-tight">Restaurant Guides</h2>
<h2 class="mt-2 font-serif text-3xl font-semibold tracking-tight">Service one</h2>
<p class="mt-4 leading-relaxed text-muted-foreground">
We produce deep, honest restaurant guides for Medellín neighborhoods, cuisine types, and dining
occasions &mdash; the kind of editorial that ranks in search and earns reader trust over time.
Each guide is researched from public signals (ratings, menus, awards, local press) and written
to the standards of a serious travel publication.
</p>
<ul class="mt-4 space-y-2 text-muted-foreground">
<li class="flex items-start gap-2"><span class="mt-1 text-primary">&#8594;</span> Neighborhood round-ups (El Poblado, Laureles, Envigado, Sabaneta, and beyond)</li>
<li class="flex items-start gap-2"><span class="mt-1 text-primary">&#8594;</span> Occasion guides: date night, family brunch, business lunch, late-night bites</li>
<li class="flex items-start gap-2"><span class="mt-1 text-primary">&#8594;</span> Cuisine-specific lists: Colombian, Japanese, Italian, vegetarian &amp; vegan, and more</li>
<li class="flex items-start gap-2"><span class="mt-1 text-primary">&#8594;</span> Evergreen pieces updated as the city&rsquo;s scene evolves</li>
</ul>
<p class="mt-4 leading-relaxed text-muted-foreground">
Guides are driven by editorial judgment, not by who pays &mdash; but restaurants that want to
ensure we have the most accurate, up-to-date information about their venue can reach out to
submit details for consideration.
Describe your first offering here &mdash; what it is, who it&rsquo;s for, and
the outcome a client can expect.
</p>
</section>
<section class="mt-12 border-t border-border pt-10">
<div class="text-xs font-medium uppercase tracking-[0.2em] text-primary">02</div>
<h2 class="mt-2 font-serif text-3xl font-semibold tracking-tight">Sponsored Features</h2>
<h2 class="mt-2 font-serif text-3xl font-semibold tracking-tight">Service two</h2>
<p class="mt-4 leading-relaxed text-muted-foreground">
A sponsored feature gives your restaurant, food business, or hospitality brand a dedicated,
long-form placement on Comiida &mdash; written to the same editorial standard as the rest of
the site, clearly labeled as sponsored, and built to perform in search over time.
</p>
<ul class="mt-4 space-y-2 text-muted-foreground">
<li class="flex items-start gap-2"><span class="mt-1 text-primary">&#8594;</span> A full editorial profile of your venue, concept, or product</li>
<li class="flex items-start gap-2"><span class="mt-1 text-primary">&#8594;</span> Inclusion in relevant round-up guides and category pages</li>
<li class="flex items-start gap-2"><span class="mt-1 text-primary">&#8594;</span> SEO-optimized copy targeting the exact searches your future guests are running</li>
<li class="flex items-start gap-2"><span class="mt-1 text-primary">&#8594;</span> Permanent placement &mdash; no monthly subscription, no expiry date</li>
</ul>
<p class="mt-4 leading-relaxed text-muted-foreground">
Sponsored features are a fit for restaurants looking to build lasting organic visibility, food
importers and producers targeting the expat market, and hospitality brands launching in
Medell&iacute;n.
Describe your second offering. Use short paragraphs and bullet lists to keep
it scannable.
</p>
</section>
<section class="mt-12 border-t border-border pt-10">
<div class="text-xs font-medium uppercase tracking-[0.2em] text-primary">03</div>
<h2 class="mt-2 font-serif text-3xl font-semibold tracking-tight">Local Food Consulting</h2>
<h2 class="mt-2 font-serif text-3xl font-semibold tracking-tight">Service three</h2>
<p class="mt-4 leading-relaxed text-muted-foreground">
Comiida is built by an AI engineer who lives in Medell&iacute;n and has spent years mapping
the city&rsquo;s food scene. That knowledge is available for hire.
</p>
<ul class="mt-4 space-y-2 text-muted-foreground">
<li class="flex items-start gap-2"><span class="mt-1 text-primary">&#8594;</span> <strong>Market research:</strong> understanding the English-speaking diner in Medellín &mdash; what they look for, where they eat, how they discover new places</li>
<li class="flex items-start gap-2"><span class="mt-1 text-primary">&#8594;</span> <strong>Location advice:</strong> neighborhood-by-neighborhood analysis for restaurants planning a new opening or expansion</li>
<li class="flex items-start gap-2"><span class="mt-1 text-primary">&#8594;</span> <strong>English menu &amp; copy review:</strong> making sure your translated menu and online presence land correctly with a native-English-speaking audience</li>
<li class="flex items-start gap-2"><span class="mt-1 text-primary">&#8594;</span> <strong>Food tours &amp; concierge briefings:</strong> curated itineraries for corporate groups, relocation services, and travel operators</li>
</ul>
<p class="mt-4 leading-relaxed text-muted-foreground">
Engagements range from a single two-hour briefing call to a multi-week research project.
Scope and pricing are agreed before any work begins.
Describe your third offering, or remove this section if you offer fewer services.
</p>
</section>
<section class="mt-12 border-t border-border pt-10">
<h2 class="font-serif text-2xl font-semibold tracking-tight">Get in touch</h2>
<p class="mt-4 leading-relaxed text-muted-foreground">
All three services start with a conversation. Tell us what you&rsquo;re trying to accomplish
and we&rsquo;ll let you know quickly whether we&rsquo;re a good fit.
Everything starts with a conversation. Tell us what you&rsquo;re trying to
accomplish and we&rsquo;ll let you know whether we&rsquo;re a good fit.
</p>
<div class="mt-6">
<a