TheJournal.

Writing about technical challenges, life lessons, and the things that keep me overthinking. Like a blog, but with a cooler name.

72Publications
11h 36mTotal read time
AWS serverless video on demand workflow
14 mins read

AWS serverless video on demand workflow

A practical look at a serverless AWS video pipeline that turns private recordings into HLS playback through MediaConvert, S3, Lambda, EventBridge, and CloudFront.

#aws#serverless#video
Is Oracle Stock Undervalued?
11 mins read

Is Oracle Stock Undervalued?

Oracle trades at a deep discount to its intrinsic value despite high debt and negative free cash flow from AI infrastructure investments

#orcl#oracle#stock-analysis
Three projects, one pipeline
6 mins read

Three projects, one pipeline

How three standalone tools, the Equity Valuation Engine, Equilyze, and Pressroom, turn a stock ticker into a finished article.

#pipeline#architecture#local-ai
Run LangChain with Ollama locally
12 mins read

Run LangChain with Ollama locally

Build a local LangChain chat project with Ollama, from environment setup to a working terminal conversation loop.

#langchain#ollama#python
Equity valuation without the black box
10 mins read
Vault

Equity valuation without the black box

Years of conservative investing led me to build a Python engine for studying company valuations with visible assumptions, model checks, and limits.

#project#python#valuation
Building a price tracker that expects failure
11 mins read
Vault

Building a price tracker that expects failure

One missed bargain became MLScraper, a Python service that watches four stores, preserves price history, and treats unreliable pages with care.

#project#python#scraping
Building albertoduran.com
6 mins read
Vault

Building albertoduran.com

A personal site built after a layoff grew into an Astro portfolio and publishing platform with an inspectable static-first system.

#astro#architecture#mdx
Automating cloud processor benchmarks with SiliconBoutique
16 mins read

Automating cloud processor benchmarks with SiliconBoutique

A unified benchmarking pipeline that deploys Online Boutique locally, on GCP, and on AWS, collects metrics, persists cloud history to BigQuery, and serves results in Grafana and a portable HTML dashboard.

#benchmarking#kubernetes#gcp
Designing an AI ops agent from the ground up
30 mins read

Designing an AI ops agent from the ground up

A spec-driven blueprint for building infrastructure intelligence with LangGraph, Prometheus, and Claude Sonnet. Learn how seven markdown files become a working AI agent.

#ai-agents#site-reliability#langgraph
From zero to live GCP benchmarks with SiliconBoutique
21 mins read

From zero to live GCP benchmarks with SiliconBoutique

A complete walkthrough for setting up a Google Cloud account, configuring GitHub Actions OIDC auth, and running your first automated benchmark with SiliconBoutique.

#gcp#github-actions#terraform
My First publication!
5 mins read

My First publication!

The story behind my website and what you can expect to find here.

#personal#story time
A writer's platform
9 mins read
Vault

A writer's platform

An academic writing platform introduced me to software architecture and placed second among 40 projects after I built it on my own.

#project#software-design#docker
Assumptions, scenarios, and honest uncertainty
10 mins readIn Equity valuation without the black box

Assumptions, scenarios, and honest uncertainty

Learn how historical signals, configured limits, and scenario policy become Bear, Base, and Bull paths without pretending to predict.

#valuation#finance#scenarios
How to choose a valuation model
11 mins readIn Equity valuation without the black box

How to choose a valuation model

Match DCF, multiples, dividends, assets, and reverse DCF to the financial shape of a business before trusting any estimate.

#valuation#finance#models
DCF and reverse DCF, step by step
11 mins readIn Equity valuation without the black box

DCF and reverse DCF, step by step

Build a discounted cash-flow valuation, inspect its sensitivity, and reverse the calculation to understand market-implied expectations.

#valuation#dcf#finance
Extending the engine without breaking its contract
10 mins readIn Equity valuation without the black box

Extending the engine without breaking its contract

Trace the architecture behind data fields, diagnostics, suitability, valuation managers, CLI output, JSON, and tests before adding features.

#python#architecture#valuation
Your first valuation run
11 mins readIn Equity valuation without the black box

Your first valuation run

Install the equity valuation engine, run one ticker, and learn to read suitability checks, scenarios, skipped models, and JSON.

#python#valuation#tutorial
Six other ways to value a company
11 mins readIn Equity valuation without the black box

Six other ways to value a company

Compare P/E, EV/EBITDA, P/S, ROE, DDM, and NAV through independent examples, and learn why every model needs its own guardrails.

#valuation#multiples#finance
How to read a valuation result
11 mins readIn Equity valuation without the black box

How to read a valuation result

Interpret scenario rows, skipped models, the equal-weight composite, model dispersion, and JSON without turning output into a target price.

#valuation#json#analysis
From market data to usable metrics
10 mins readIn Equity valuation without the black box

From market data to usable metrics

Follow provider data into StockMetrics, learn what missing-value diagnostics preserve, and see which gaps can still mislead a model.

#python#valuation#data-quality
Your first MLScraper price watch
12 mins readIn Building a price tracker that expects failure

Your first MLScraper price watch

Follow one illustrative Amazon Mexico watch from YAML and URL preview to saved product history, runtime health, and a later price alert.

#python#scraping#tutorial
ECharts in MDX publications
5 mins readIn Building albertoduran.com

ECharts in MDX publications

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

#echarts#mdx#charts
Chart examples for journal authors
10 mins readIn Building albertoduran.com

Chart examples for journal authors

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

#echarts#charts#mdx
How ECharts renders in the build
7 mins readIn Building albertoduran.com

How ECharts renders in the build

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

#echarts#astro#mdx
When a store blocks the scraper
10 mins readIn Building a price tracker that expects failure

When a store blocks the scraper

Learn how MLScraper chooses HTTP or browser fetching, protects history after incomplete pages, and slows the right scope after failures.

#python#playwright#scraping
How a YAML job becomes a store URL
11 mins readIn Building a price tracker that expects failure

How a YAML job becomes a store URL

Learn how MLScraper turns stable job identity and provider options into validated store routes, predictable storage paths, and safe previews.

#python#configuration#scraping
Operating MLScraper and adding a store
10 mins readIn Building a price tracker that expects failure

Operating MLScraper and adding a store

Run MLScraper locally, diagnose health and saved state, exercise its offline tests, and extend the provider contract without runtime leaks.

#python#testing#operations
How a product becomes price history
10 mins readIn Building a price tracker that expects failure

How a product becomes price history

Follow one stable product identifier through updates, temporary absence, recovery, JSON persistence, and MLScraper price-drop alerts.

#python#data#persistence
Why every store needs its own adapter
10 mins readIn Building a price tracker that expects failure

Why every store needs its own adapter

Compare four ecommerce page formats and learn how MLScraper isolates store-specific URLs and parsing behind one product contract.

#python#architecture#scraping
What happens during one scrape cycle
11 mins readIn Building a price tracker that expects failure

What happens during one scrape cycle

See how FastAPI starts MLScraper, provider loops share concurrency safely, and health turns background work into observable state.

#python#fastapi#asyncio
Design system map
8 mins readIn Building albertoduran.com

Design system map

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

#design#css#daisyui
The CSS architecture
9 mins readIn Building albertoduran.com

The CSS architecture

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

#css#tailwind#architecture
DaisyUI 5 themes with OKLCH and Tailwind v4
8 mins readIn Building albertoduran.com

DaisyUI 5 themes with OKLCH and Tailwind v4

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

#daisyui#tailwind#themes
Parallax with CSS scroll timelines
8 mins readIn Building albertoduran.com

Parallax with CSS scroll timelines

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

#css#parallax#motion
SVG icons without a library
8 mins readIn Building albertoduran.com

SVG icons without a library

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

#svg#icons#design
UI implementation rules
8 mins readIn Building albertoduran.com

UI implementation rules

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

#design#ui#css
Foundation map
9 mins readIn Building albertoduran.com

Foundation map

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

#architecture#astro#cloudflare
Static deployment on Cloudflare Workers Static Assets
5 mins readIn Building albertoduran.com

Static deployment on Cloudflare Workers Static Assets

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

#cloudflare#deployment#astro
The development environment
9 mins readIn Building albertoduran.com

The development environment

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

#devcontainer#node#tooling
The repository architecture
9 mins readIn Building albertoduran.com

The repository architecture

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

#architecture#astro#routes
Why the site has a custom Mermaid integration
9 mins readIn Building albertoduran.com

Why the site has a custom Mermaid integration

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

#mermaid#astro#diagrams
Standalone assets and release guardrails
7 mins readIn Building albertoduran.com

Standalone assets and release guardrails

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

#mermaid#svg#testing
The external Mermaid renderer contract
5 mins readIn Building albertoduran.com

The external Mermaid renderer contract

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

#mermaid#cloudflare#worker
Batch pipeline, disk cache, and remote cache
8 mins readIn Building albertoduran.com

Batch pipeline, disk cache, and remote cache

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

#mermaid#caching#build
Cloudflare Worker and mermaid.ink
8 mins readIn Building albertoduran.com

Cloudflare Worker and mermaid.ink

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

#mermaid#rendering#cloudflare
Generating Mermaid themes from DaisyUI palettes
8 mins readIn Building albertoduran.com

Generating Mermaid themes from DaisyUI palettes

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

#mermaid#daisyui#themes
Merging multi-theme SVGs with HAST
8 mins readIn Building albertoduran.com

Merging multi-theme SVGs with HAST

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

#mermaid#svg#hast
Performance map
9 mins readIn Building albertoduran.com

Performance map

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

#performance#astro#frontend
Build-time file optimization
10 mins readIn Building albertoduran.com

Build-time file optimization

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

#performance#build#optimization
Images and fonts
9 mins readIn Building albertoduran.com

Images and fonts

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

#performance#images#fonts
Responsive navigation without timing claims
8 mins readIn Building albertoduran.com

Responsive navigation without timing claims

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

#performance#navigation#astro
Inside the publication system
9 mins readIn Building albertoduran.com

Inside the publication system

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

#astro#mdx#content
Code blocks with Shiki and DaisyUI
11 mins readIn Building albertoduran.com

Code blocks with Shiki and DaisyUI

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

#astro#shiki#code
Content collections and schema rules
11 mins readIn Building albertoduran.com

Content collections and schema rules

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

#astro#schema#mdx
Drafts, vault rules, and read time
11 mins readIn Building albertoduran.com

Drafts, vault rules, and read time

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

#content#manifest#astro
The MDX rendering pipeline
10 mins readIn Building albertoduran.com

The MDX rendering pipeline

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

#astro#mdx#rendering
Static page generation and navigation
10 mins readIn Building albertoduran.com

Static page generation and navigation

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

#astro#routing#navigation
Quality map
9 mins readIn Building albertoduran.com

Quality map

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

#testing#quality#ci
Chromium preview and tested accessibility behaviors
9 mins readIn Building albertoduran.com

Chromium preview and tested accessibility behaviors

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

#playwright#accessibility#e2e
Testing the risky build-time systems
9 mins readIn Building albertoduran.com

Testing the risky build-time systems

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

#testing#mermaid#echarts
The testing strategy
9 mins readIn Building albertoduran.com

The testing strategy

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

#testing#vitest#playwright
Runtime enhancement map
8 mins readIn Building albertoduran.com

Runtime enhancement map

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

#runtime#frontend#astro
Live data at build time
9 mins readIn Building albertoduran.com

Live data at build time

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

#runtime#data#astro
Diagram expansion and theme-specific asset links
6 mins readIn Building albertoduran.com

Diagram expansion and theme-specific asset links

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

#runtime#mermaid#svg
Scroll-based article navigation
8 mins readIn Building albertoduran.com

Scroll-based article navigation

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

#runtime#navigation#accessibility
OverlayPanel, focus, and scroll lock
8 mins readIn Building albertoduran.com

OverlayPanel, focus, and scroll lock

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

#runtime#accessibility#overlays
Theme management and view transitions
8 mins readIn Building albertoduran.com

Theme management and view transitions

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

#runtime#themes#astro
Engineering the Sin Pluma React frontend
11 mins readIn A writer's platform

Engineering the Sin Pluma React frontend

A detailed look at how Sin Pluma's React SPA is structured: Redux state, HOC-based auth guards, Axios interceptors, Slate.js rich text editor, and backend service integration patterns.

#react#redux#slate-js
How Sin Pluma's architecture fits together
8 mins readIn A writer's platform

How Sin Pluma's architecture fits together

A detailed walkthrough of every service in the Sin Pluma system, how Docker networks isolate them, the data flows behind key operations, and the architectural strengths and constraints.

#architecture#docker#microservices
Designing the Sin Pluma Flask REST API
10 mins readIn A writer's platform

Designing the Sin Pluma Flask REST API

How Sin Pluma's Flask API is structured: the app factory pattern, blueprint organization, full endpoint inventory, Marshmallow validation, and integrations with MySQL, Redis, and MinIO.

#python#flask#rest api
High availability with MySQL InnoDB Cluster in Sin Pluma
10 mins readIn A writer's platform

High availability with MySQL InnoDB Cluster in Sin Pluma

How Sin Pluma bootstraps a three-node MySQL InnoDB Cluster, handles automatic failover, manages the schema, and what production hardening looks like beyond the demo environment.

#databases#MySQL#InnoDB
JWT in practice: access, refresh, and revocation in Sin Pluma
10 mins readIn A writer's platform

JWT in practice: access, refresh, and revocation in Sin Pluma

A detailed walkthrough of Sin Pluma's JWT implementation: token structure, full lifecycle, the Redis blacklist, the Axios refresh queue, storage trade-offs, and security best practices.