An informational website about Miriam González Pérez's case: metastatic breast cancer with neuroendocrine differentiation (~80%) and FGFR1 amplification ×13.
- Nuxt 4 — framework
- Nuxt Content v3 — Markdown/YAML content collections
- @nuxtjs/i18n — internationalization ES/EN
- @nuxtjs/seo — SEO meta, OG images, robots, sitemap, schema.org
- @nuxtjs/sitemap — XML sitemap with i18n hreflang
- nuxt-ai-ready — AI/LLM readiness (
/llms.txt) - @nuxtjs/plausible — privacy-first analytics (ignores localhost)
- Tailwind CSS — styles
- @nuxt/icon — icons (Phosphor Icons via Iconify)
- Netlify Functions — live GoFundMe data endpoints (CDN-cached, no redeploy)
- Netlify Forms — contact form (no backend)
pnpm install
pnpm dev # local dev at http://localhost:3000
pnpm update-fundraiser # manually sync GoFundMe progress (add --force to overwrite existing file)Open http://localhost:3000.
pnpm generateUpload the .output/public/ folder to Vercel, Netlify, or Cloudflare Pages.
For automatic deployment with Vercel:
- Connect the GitHub repo
- Framework preset: Nuxt.js
- Every push to
maintriggers automatic redeployment
app/
pages/
index.vue → Landing (hero + GoFundMe + molecular profile + thesis)
ciencia/
index.vue → Complete scientific page + article list
[slug].vue → Individual science article
historia/
index.vue → Chapter list
[slug].vue → Individual chapter with prev/next
equipo.vue → Team (anonymous, by profession)
timeline.vue → Week-by-week timeline
contacto.vue → Contact + Netlify Forms
components/
OgImage/
Default.takumi.vue → OG image template (nuxt-og-image)
SiteNav.vue → Sticky navigation with i18n toggle
SiteFooter.vue → Footer
SectionHero.vue → Landing hero
SectionCampaign.vue → GoFundMe section
MolecularProfile.vue → Molecular profile table
TimelineEntry.vue → Individual timeline entry
TeamCard.vue → Team member card
PageHeader.vue → Reusable page header
netlify/functions/
fundraiser.mts → Live GoFundMe total (CDN-cached ~15 min)
donations.mts → Live donor list / stars (parallel fetch, CDN-cached ~1 h)
utils/
fundraiser.ts → GoFundMe GraphQL + feed client, types, fetchers + build seed
seed.ts → reads build-time public/*.json as a fallback
public/
fundraiser.json → Static snapshot of GoFundMe progress (gitignored, auto-generated at build time)
content/
es/ → timeline.yml, team.yml, press.yml, science.yml, historia/*.md, ciencia/*.md
en/ → timeline.yml, team.yml, press.yml, science.yml, story/*.md, science/*.md
i18n/locales/
es.json → Spanish strings
en.json → English strings
All content lives in content/es/ and content/en/. Edit the YAML or Markdown files and push to main — the site regenerates automatically. See CONTENT-REPO.md for full details.
We welcome contributions! Here's how you can help:
If you have a good idea, feature request, or notice something that could be improved:
- Go to the Issues tab
- Click New Issue
- Describe your idea or suggestion
- Submit — we'll review it and get back to you
- Fork the repository
- Create a feature branch:
git checkout -b feature/your-feature-name - Make your changes
- Submit a pull request
- Mobile-first CSS (use Tailwind utilities)
- BEM naming convention for custom CSS
- No
anyin TypeScript - Accessibility: semantic HTML, proper labels, keyboard navigation
-
Add page-specific Open Graph meta tags→useSeoMetaon all pages + OG image component -
robots.txt→ managed bynuxt-robots(public/_robots.txt) -
Sitemap→@nuxtjs/sitemapwith i18n hreflang auto-generated -
AEO / agentic search→nuxt-ai-readyserves/llms.txt - Alba's complete text in
app/pages/historia/index.vue— will be added gradually - Add favicon (
public/favicon.icoorpublic/favicon.svg) - Verify
helpmiriam.comin Google Search Console and request indexing - Think about a way to auto-update the timeline from social media posts
- Talk to Miriam about what images she wants to use
-
Research if GoFundMe API can be used instead of iframe→ Live Netlify Function endpoints querying GoFundMe, CDN-cached (no redeploy needed)