Portfolio Live

Portfolio

Marco Orta's portfolio and blog on Astro 6 SSR, Preact, Tailwind 4 and Pagefind, with EN/ES i18n, MDX content and developer tools.

Role
Design & Development
Year
2025
Published
8 de agosto de 2025
Screenshot of the ortamarco.me portfolio homepage.

ortamarco.me is my personal portfolio: it showcases my projects, hosts a technical blog written in MDX and publishes a collection of tools for developers and network admins. It runs on Astro 6 in SSR mode behind the standalone Node adapter, with opt-in prerendering on static pages so it keeps top performance and SEO without giving up dynamic endpoints.

Features

  • Astro 6 SSR + selective prerender: static pages opt in via export const prerender = true, dynamic endpoints stay server-rendered.
  • EN/ES i18n: Spanish is the default; English lives under /en/ with its own page copies and shared translations under src/i18n/.
  • MDX blog with Prism-powered syntax highlighting and Zod-typed content collections.
  • In-house tools (JWT decoder, DNS / SSL / IP lookups, converters, etc.) built as Preact islands paired with src/pages/api/tools/ endpoints.
  • Forms as Astro Actions validated with Zod (contact, quote, newsletter), delivering transactional email through Mailgun.
  • Static search via Pagefind: index built at build time and consumed by /search, with zero server cost.

Tech stack

  • Astro 6 with @astrojs/node (standalone) in SSR mode
  • TypeScript with strict mode across the codebase
  • Preact for interactive islands
  • Tailwind CSS 4 as a Vite plugin, no tailwind.config
  • Alpine.js for lightweight interactions (nav toggle)
  • Pagefind for the static search index
  • Astro Content Collections as the source of truth for blog, projects, tools and static data

Demo

Visit the homepage →

Goal

Be a single, fast, accessible bilingual hub that combines portfolio, blog and developer tools, while the codebase itself doubles as a case study of the stack it’s built on.

04 / Contact

Ready to take your idea to the next level? Let's work together.

Fill out the form and I'll reply within 24 hours. Or, if you prefer a quick call: