albertoduran.com

A personal site I began after a layoff so my work would have more room than a résumé or interview, now built as a static-first portfolio and publishing platform.

Role
Design & Engineering
Platform
Astro 6
Rendering
Static-first
Delivery
Workers Static Assets
A bright development workspace with source code open on a laptop

More room than an interview

I started albertoduran.com after I was laid off. A résumé can list experience, but it cannot show much of how I think or build, and a short interview rarely leaves enough time to walk through the work properly.

What began as a personal introduction grew into a portfolio, a set of project case studies, and a place for all kinds of writing. Astro resolves the content, routes, diagrams, charts, and responsive images before deployment, so the site itself can demonstrate the engineering choices I want readers and hiring teams to inspect.

Choose how deep to read

Visitors arrive with different amounts of time and curiosity. They can scan the profile, open a project overview, read one focused article, or follow a complete architecture vault without moving to a separate product.

From source to reader

Source files move through named ownership boundaries. Collections and manifests decide what publishes, integrations handle visual rendering, Astro emits the complete file graph, and Workers Static Assets serves it. The browser starts with a useful document.

The separation gives each failure a smaller search area. A broken runtime control can be debugged without treating the content manifest or generated page as the same problem.

optional enhancement

📝 Astro, MDX, and typed data

🧭 Collections and manifests

⚙️ Build integrations

📦 HTML, CSS, images, charts, and SVG

☁️ Cloudflare edge delivery

👤 Readable page

✨ Theme, overlays, and navigation

The browser can take the day off

Both examples below are SVG produced during the build. The Mermaid fence travels through the diagram integration, while the ECharts option uses the server renderer. Neither visual waits for client-side JavaScript to become readable.

Mermaid source becomes a static diagram

This flow is stored as readable Mermaid text in the repository. The build converts it into themed SVG and places the result in the page.

optional

📝 Mermaid source

⚙️ Mermaid integration

📊 ECharts option

⚙️ Server renderer

🖼️ Diagram SVG

📈 Chart SVG

📄 Generated HTML

👤 Readable with JavaScript off

✨ Browser interaction

ECharts renders before hydration

This chart uses an illustrative dataset and the same EChart component available to journal authors. No hydration mode is set, so the output stays a static SVG by design.

Sample publication trendIllustrative data rendered as static SVG

Decisions that shape the experience

The Journal has publication rules

An article enters the site as MDX, then the publication manifest gives it a route, navigation context, breadcrumbs, and a place in the reading sequence. Authors work with content while the build applies those rules.

A complete page before enhancement

The browser receives a complete document first. It then handles facts the build cannot know, including the reader's theme preference, viewport, focus position, scroll state, and local timezone.

From validation to deployment

  1. Validate source
  2. Resolve content
  3. Render assets
  4. Test output
  5. Deliver files

Tests follow the failure boundary

Astro diagnostics protect source and content shapes. Vitest covers manifest rules, SVG transforms, charts, loaders, and minification. A deterministic production build replaces unstable outside inputs, and Playwright checks selected reader behavior in Chromium.

Hosting serves the finished file graph

Production receives complete routes, metadata, fonts, images, themed diagrams, chart SVG, CSS, and runtime modules. Workers Static Assets serves that file graph without assembling journal pages per request.

The outcome

One site connects who I am, what I have built, and how I work.

  • Hiring teams get a concise professional overview with technical evidence close at hand.
  • Developers can learn from the architecture, tradeoffs, diagrams, and tests behind a working project.
  • The portfolio and journal remain useful with JavaScript disabled, including their technical visuals.

Technical deep dives

Follow the project beyond the landing page. Each publication focuses on one architectural boundary, implementation decision, or operational lesson.

Foundation map

  • Foundation mapSection overview
    9 min read · #architecture #astro #cloudflare

    A short guide to the repository shape, local development environment, and Cloudflare deployment target behind albertoduran.com.

  • The repository architecture
    9 min read · #architecture #astro #routes

    One publication change crosses content, manifest, route, layout, runtime, and style boundaries that keep the repository understandable.

  • The development environment
    9 min read · #devcontainer #node #tooling

    The devcontainer standardizes Node 22 and editor tooling while leaving dependency replay, network access, and production checks explicit.

  • Static deployment on Cloudflare Workers Static Assets
    5 min read · #cloudflare #deployment #astro

    The deployment artifact is a file graph served by Cloudflare Workers Static Assets, with explicit 404 and generated asset behavior.

Inside the publication system

  • Inside the publication systemSection overview
    9 min read · #astro #mdx #content

    The publication system behaves like a compiler whose policy stages turn MDX candidates into routes, navigation, and complete article pages.

  • Content collections and schema rules
    11 min read · #astro #schema #mdx

    The active Zod schema accepts less metadata than the MDX files carry, exposing fields that are unsupported, unused, or only partly wired.

  • Drafts, vault rules, and read time
    11 min read · #content #manifest #astro

    A typed manifest turns a fixture tree into publication policy for vault ownership, ordering, read time, inherited images, and pagination.

  • Static page generation and navigation
    10 min read · #astro #routing #navigation

    One published entry travels through static path generation and a thin catch-all route into a complete desktop and mobile article shell.

  • The MDX rendering pipeline
    10 min read · #astro #mdx #rendering

    Plain MDX syntax and explicit component imports follow different paths into the article's headings, tables, code, diagrams, and charts.

  • Code blocks with Shiki and DaisyUI
    11 min read · #astro #shiki #code

    A fenced sample becomes dual-theme Shiki HTML, a line-numbered component, and markup protected from the production minifier.

Why the site has a custom Mermaid integration

  • Why the site has a custom Mermaid integrationSection overview
    9 min read · #mermaid #astro #diagrams

    Why Mermaid diagrams render at build time through a custom Astro integration, external browser service, and static SVG assets.

  • Batch pipeline, disk cache, and remote cache
    8 min read · #mermaid #caching #build

    Publishable Markdown files prepare diagrams with one build-scoped coordinator that handles cache lookup, batch rendering, and asset emission.

  • The external Mermaid renderer contract
    5 min read · #mermaid #cloudflare #worker

    The repository defines a batch renderer contract but cannot verify the external Worker's source, deployment, fonts, or production telemetry.

  • Cloudflare Worker and mermaid.ink
    8 min read · #mermaid #rendering #cloudflare

    Provider selection contains build failures across an external batch Worker, a public mermaid.ink fallback, and deterministic fixtures.

  • Merging multi-theme SVGs with HAST
    8 min read · #mermaid #svg #hast

    An SVG compiler pass removes scripts, cleans selected styles, rewrites IDs, scopes CSS, and merges light and dark renderer output.

  • Generating Mermaid themes from DaisyUI palettes
    8 min read · #mermaid #daisyui #themes

    Serializable Mermaid variables carry the site's semantic palettes across a renderer boundary without claiming unmeasured contrast.

  • Standalone assets and release guardrails
    7 min read · #mermaid #svg #testing

    One diagram produces themed SVG files and runtime metadata tied to a renderer version.

ECharts in MDX publications

  • ECharts in MDX publicationsSection overview
    5 min read · #echarts #mdx #charts

    Why the journal has a static-first ECharts path for data visuals, how it differs from Mermaid, and how the section is organized.

  • How ECharts renders in the build
    7 min read · #echarts #astro #mdx

    One option object becomes an accessible static SVG, an optional file asset, or a chart that hydrates only when the article requests it.

  • Chart examples for journal authors
    10 min read · #echarts #charts #mdx

    A published ECharts example page showing common, dense, hierarchical, flow, distribution, and finance chart options in MDX.

Performance map

  • Performance mapSection overview
    9 min read · #performance #astro #frontend

    The site moves work into the build, but its current evidence covers artifacts and behavior rather than Web Vitals or navigation timing.

  • Responsive navigation without timing claims
    8 min read · #performance #navigation #astro

    Static links gain prefetching, document swaps, and theme lifecycle hooks, though the repository has no navigation timing baseline yet.

  • Build-time file optimization
    10 min read · #performance #build #optimization

    A deterministic build shows what each optimizer changes and exposes the JavaScript chunk warning that still needs a measured budget.

  • Images and fonts
    9 min read · #performance #images #fonts

    Images and fonts receive different loading treatment according to their role, with explicit priorities and an honest measurement gap.

Runtime enhancement map

  • Runtime enhancement mapSection overview
    8 min read · #runtime #frontend #astro

    Browser modules own preference, viewport, focus, scroll, and local time while the static build remains responsible for readable content.

  • Theme management and view transitions
    8 min read · #runtime #themes #astro

    Theme correctness has three deadlines around first paint, user choice, and Astro route swaps, each owned by a different layer.

  • Scroll-based article navigation
    8 min read · #runtime #navigation #accessibility

    A heading list becomes reliable scroll navigation only after accounting for sticky offsets, page edges, clicks, and route cleanup.

  • OverlayPanel, focus, and scroll lock
    8 min read · #runtime #accessibility #overlays

    A checkbox-based overlay provides the static baseline, then browser code adds focus control, Escape handling, and scroll containment.

  • Diagram expansion and theme-specific asset links
    6 min read · #runtime #mermaid #svg

    An already-rendered diagram gains theme-aware asset links and disposable popover expansion without shipping Mermaid to the browser.

  • Live data at build time
    9 min read · #runtime #data #astro

    An unstable ESPN page feeds build-time Atlas data, deterministic fixtures protect tests, and the browser localizes the rendered match time.

Design system map

  • Design system mapSection overview
    8 min read · #design #css #daisyui

    A map of the site's visual system across Tailwind tokens, DaisyUI themes, CSS partials, SVG icons, parallax, and UI rules.

  • The CSS architecture
    9 min read · #css #tailwind #architecture

    One ordered CSS manifest makes the cascade inspectable across Tailwind, DaisyUI, project tokens, shared components, and page rules.

  • DaisyUI 5 themes with OKLCH and Tailwind v4
    8 min read · #daisyui #tailwind #themes

    A semantic color token travels from DaisyUI's OKLCH themes through Tailwind utilities, component surfaces, and Mermaid palettes.

  • SVG icons without a library
    8 min read · #svg #icons #design

    Three SVG paths cover typed controls, file-loaded skill marks, and generated ribbons, each with a different trust boundary.

  • Parallax with CSS scroll timelines
    8 min read · #css #parallax #motion

    The Atlas hero keeps its content in Astro markup while CSS owns depth, narrow viewport cropping, and reduced motion behavior.

  • UI implementation rules
    8 min read · #design #ui #css

    A concise contributor guide for building UI with semantic tokens, consistent spacing, responsive rules, and accessible overlays.

Quality map

  • Quality mapSection overview
    9 min read · #testing #quality #ci

    The quality system matches evidence to risk while naming its missing lint, coverage threshold, cross-browser, and accessibility gates.

  • The testing strategy
    9 min read · #testing #vitest #playwright

    Diagnostics, unit tests, a deterministic build, and Chromium preview checks each cover a different failure class in the CI sequence.

  • Testing the risky build-time systems
    9 min read · #testing #mermaid #echarts #manifest

    Focused regression stories show how unit tests catch draft leaks, SVG ID collisions, unsafe chart options, and damaged generated markup.

  • Chromium preview and tested accessibility behaviors
    9 min read · #playwright #accessibility #e2e

    Chromium tests verify selected reader behaviors while leaving Axe rules, screen readers, reduced motion, Firefox, and WebKit uncovered.