Static site for my CV, service pages, and longer Details pages per role. Built from Markdown with a small Node script.
https://felipebasurto.com on Cloudflare Workers. Deploy with npm run deploy.
- Markdown:
content/cv.md(home),content/projects.md→/projects/,content/pages/(landing pages), andcontent/experience/*.md(per-role pages) - Optional timeline page:
content/experience/cursor.json(replacescursor.mdif both exist) - Build: Node + marked —
scripts/build.mjs - Shell:
scripts/template.html - Styles:
css/styles.css
- Edit Markdown, run
npm run build; output isindex.htmlat the repo root,<slug>/index.htmlfor eachLANDING_PAGESentry,projects/index.htmlfromcontent/projects.md, andexperience/<slug>/index.htmlfor each experience source cursor.jsoncan list remote image URLs; the build uses the network to refresh files underassets/experience/cursor/(throttled). Commit those assets if you want reproducible builds offline. Each image object may include an optional stringaltfor accessibility; otherwise alts are generated from the event title. Use each LinkedIn media URL only once across the whole file—reusing the same URL under different events repeats the same photo and mixes themes. For assets you keep in-repo without a URL, use{ "static": "filename.jpg" }(file must already live underassets/experience/cursor/)- Terminal-style UI with visible
##headings and link labels (URL often in the native tooltip viatitle) npm run buildalso regeneratessitemap.xml(home, landing pages fromLANDING_PAGES,/projects/if present, then experience slugs)
├── content/
│ ├── cv.md # Home page copy
│ ├── projects.md # /projects/ (apps + GitHub list)
│ ├── pages/ # Landing pages declared in LANDING_PAGES
│ └── experience/ # Per-role Markdown + optional cursor.json
├── scripts/
│ ├── build.mjs
│ └── template.html
├── css/styles.css
├── assets/
├── index.html # Generated (commit for root deploy)
├── projects/index.html # Generated from content/projects.md
├── experience/<slug>/index.html # Generated
└── sitemap.xml # Generated by build
Deploy: npm run build writes HTML at the repo root; npm run build:dist copies the public files into dist/. npm run deploy publishes that dist/ to the felipebasurto-com Worker.
-
Clone and install:
git clone https://github.com/felipebasurto/felipebasurto.github.io.git cd felipebasurto.github.io npm install -
Edit
content/cv.md,content/projects.md, and/orcontent/experience/*, then:npm run build
-
Preview locally (opening
index.htmlviafile://often fails to load CSS):npm run preview
Or serve the repo root:
python3 -m http.server 8080.
The custom domain is attached on the Worker (felipebasurto.com and www). Preview: https://felipebasurto-com.felipe99basurto.workers.dev.
- Email: hello@felipebasurto.com
- LinkedIn: felipe-basurto-barrio
- Twitter / X: @fildotai
Personal portfolio: all rights reserved. No license is granted to copy or redistribute the content or branding. The build tooling (e.g. marked) remains under its respective licenses.
__________________
| ________________|
| | |
| | Hello, |
| | World! :) |
| | _________ |
| | | | | |
| | | | | |
| | | | | |
| | |____|__| |
| | |
| |________________|
| |
| [_________] |
|__________________|