From 064c9e96d970dbce37d0234a7430bc8e2a5f5efa Mon Sep 17 00:00:00 2001 From: Ruben Beltran del Rio Date: Thu, 11 Dec 2025 12:23:43 +0100 Subject: Update site content. --- .build.yml | 8 +- content/_index.md | 111 +++++++++++++------------ static/css/style.css | 62 +++++++------- static/font/LibreCaslonText-Italic[wght].woff2 | Bin 0 -> 63024 bytes static/font/LibreCaslonText[wght].woff2 | Bin 0 -> 57616 bytes static/font/Ronzino-Bold.woff2 | Bin 36908 -> 0 bytes static/font/Ronzino-BoldOblique.woff2 | Bin 36260 -> 0 bytes static/font/Ronzino-Medium.woff2 | Bin 36748 -> 0 bytes static/font/Ronzino-MediumOblique.woff2 | Bin 36304 -> 0 bytes static/font/Ronzino-Oblique.woff2 | Bin 36260 -> 0 bytes static/font/Ronzino-Regular.woff2 | Bin 36316 -> 0 bytes static/img/darkgrid.svg | 4 +- static/img/lightgrid.svg | 4 +- 13 files changed, 97 insertions(+), 92 deletions(-) create mode 100644 static/font/LibreCaslonText-Italic[wght].woff2 create mode 100644 static/font/LibreCaslonText[wght].woff2 delete mode 100644 static/font/Ronzino-Bold.woff2 delete mode 100644 static/font/Ronzino-BoldOblique.woff2 delete mode 100644 static/font/Ronzino-Medium.woff2 delete mode 100644 static/font/Ronzino-MediumOblique.woff2 delete mode 100644 static/font/Ronzino-Oblique.woff2 delete mode 100644 static/font/Ronzino-Regular.woff2 diff --git a/.build.yml b/.build.yml index 6cde9a1..6ef217c 100644 --- a/.build.yml +++ b/.build.yml @@ -4,14 +4,14 @@ packages: - rsync - zola sources: - - git@git.sr.ht:~rbdr/ruben.bdr.sh + - git@git.sr.ht:~rbdr/www.holistic.services secrets: - a1e0e3da-c1ad-473a-ad69-8878f267a628 - deedaf0c-1534-445d-a9b8-0910b22478b4 tasks: - generate: | - cd ruben.bdr.sh + cd www.holistic.services zola build - sync: | - cd ruben.bdr.sh/public - rsync -r . deploy@conchos.bdr.sh:/srv/http/ruben.bdr.sh + cd www.holistic.services/public + rsync -r . deploy@conchos.bdr.sh:/srv/http/www.holistic.services diff --git a/content/_index.md b/content/_index.md index b0dbc3b..85c9ad2 100644 --- a/content/_index.md +++ b/content/_index.md @@ -5,62 +5,67 @@ description = "Freelance Software Engineer | iOS, macOS, Web & Backend Developme
{% window(title="Welcome.") %} A pixel-art portrait of Rubén doing a peace sign and sticking his tongue out -

Howdy! I'm Rubén Beltrán del Río, a freelance software engineer based in Berlin. I build iOS and macOS apps, web applications, backend services, and help teams with technical leadership. Looking for some help with your project? I might be able to help!

+

+ Howdy! I'm Rubén, a freelance software engineer and technical leader + based in Berlin. I love building software and helping teams figure out + how to build: how systems of people and technology, processes, + and culture can make the difference between chaos and meaningful work. +

{% end %}
-
-
-

I can help you build.

-
    -
  • Fast, accessible websites with SEO optimization and cutting edge web development best practices.
  • -
  • Native iOS, iPadOS, and macOS apps using Swift, Catalyst, SwiftUI, or UIKit.
  • -
  • Scalable backend services with great observability, clear documentation, and cloude-native infrastructure.
  • -
  • End-to-end data pipelines from tracking planning, to ELT/ETL workflows that deliver accurate and actionable analytics insights.
  • -
  • Infrastructure as code that can orchestrate and manage all your services on AWS, Scaleway, Azure or any cloud provider.
  • -
-
-
-

Optimize and improve.

-
    -
  • Supply chain analysis to reduce risk from dependencies across different languages and packaging ecosystems.
  • -
  • CI & CD automation to improve code quality, testing, and deployment.
  • -
  • Cloud cost optimization through right-sizing, architecture improvements, and spending analysis for AWS, GCP, Azure and other cloud providers.
  • -
  • LLM integration & optimization using custom tooling, prompt engineering, and Model Context Protocol (MCP) servers.
  • -
-
-
-

Or help your team go fast.

-
    -
  • AI transformation. Teach your organization how to work with AI, and build the right tools to support it.
  • -
  • Upskill your team, and bring them up to speed with new technologies, architecture patterns or processes.
  • -
  • Build a product engineering mindset and ehelp your product and engineering teams speak the same language, and work closer together.
  • -
  • Experimentation mindset to enable your team to design, execute, and interpret A/B tests and multivariate experiments.
  • -
  • Systems analysis to streamline your operations by understanding how your team, resources and processes come together, finding chokepoints, and reducing waste.
  • -
+
+
+

I've spent over 20 years helping teams — whether it's startups + just shipping their first product, to scale-ups experiencing growing + pains. As a tech lead, I've seen this familiar picture: legacy systems + that hinder more than they help, unpredictable release cycles that + add more bugs than value, and teams good at moving code but not + moving the needle.

+
+
+

I work holistically because problems rarely have + their root in just one place. A slow release pipeline that looks like + a technical issue, reveals itself to be a trust problem when you look + under the surface. A product launch failing to achieve its goals seems + like a clear case of poor planning, but instead reveals how different + parts of the organization have a different language and view of reality. + I help teams understand the big picture, and find solutions that can + address their problems at every level.

+
+
+ Book a call. +
-
-
-

Ain't that right!

-

With over 25 years of experience, I've worked with big and small teams, ad-supported and sales-driven products, bootstrapped startups looking to launch, and established companies looking to scale up. I've worked with all sorts of stacks:

-
    -
  • Languages: JavaScript, Rust, Ruby, Python, PHP, Swift, Objective-C.
  • -
  • Cloud Providers: AWS, Scaleway, Cloudflare, Google Cloud, Azure.
  • -
  • CI Systems: GitHub, Gitlab, CircleCI, TravisCI, Jenkins, Bitrise.
  • -
  • Database Systems: PostgreSQL, MySQL/Aurora, Redis, MongoDB, Apache Cassandra, Snowflake.
  • -
  • Analytics Software: Google Analytics, Amplitude, PostHog, Indicative.
  • -
-
- {% window(title="Get in touch.") %} -

You can book a call to tell me about your project face to face. Or you if you prefer text, you can send me an e-mail!

- Book a call. - - {% end %} -
-
-
-

But don't take my word for it.

-

Here's what some lovely people have to say about me.

-
+
+
+

How I Can Help.

+

Sometimes you need someone to roll up their sleeves and build: Plan a system, put your product in your customers' hands, and have an infrastructure you can trust not to wake you up at night.

+

Sometimes you need help seeing the problem clearly: A second pair of eyes on a difficult problem, a diagnosis of why things seem harder and slower than they should, or a training that can change the way your team works.

+

I can do both.

+
+
+

What Does That Look Like?.

+

One team's releases took months and shipped broken. I helped them + move to predictable weekly releases that consistently shipped with zero + major bugs.

+

Another team's website took over 2 seconds to load. We got it under + 100ms at the 95th percentile, which helped SEO rankings climb steadily + afterwards.

+

And one of the most common problems I encounter: several teams were + fighting a legacy system and spending their days fighting fires. We deleted + hundreds of thousands of lines of code, and started with a simple system + that led the team to finally work on new features and improvements.

+
+
+
+ + ## Let's talk! + You can book a call or send me an e-mail to tell me about your project or problem, I might be able to help! + + Book a call. + +
+
diff --git a/static/css/style.css b/static/css/style.css index 9125736..6b95e9c 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -1,6 +1,23 @@ /* Font Faces */ @font-face { font-family: 'Libre Caslon'; + src: url('/font/LibreCaslonText[wght].woff2') format('woff2-variations'); + font-weight: 400 700; + font-style: normal; + font-display: swap; + size-adjust: 100%; +} + +@font-face { + font-family: 'Libre Caslon'; + src: url('/font/LibreCaslonText-Italic[wght].woff2') format('woff2-variations'); + font-weight: 400 700; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'Libre Caslon Condensed'; src: url('/font/LibreCaslonCondensed[wdth,wght].woff2') format('woff2-variations'); font-weight: 400 700; font-stretch: 75% 100%; @@ -10,7 +27,7 @@ } @font-face { - font-family: 'Libre Caslon'; + font-family: 'Libre Caslon Condensed'; src: url('/font/LibreCaslonCondensed-Italic[wght].woff2') format('woff2-variations'); font-weight: 400 700; font-style: italic; @@ -24,8 +41,11 @@ --foreground: #000019; --foreground-emphasis: #191919; --selection-color: #ccc; - --font-display: 'Libre Caslon', 'Times New Roman', 'Georgia', serif; - --font-body: 'Helvetica Neue', Helvetica, Arial, sans-serif; + --font-display: 'Libre Caslon Condensed', 'Times New Roman', Georgia, serif; + --font-body: 'Libre Caslon', 'Times New Roman', Georgia, serif; + --font-windows: 'Helvetica Neue', Helvetica, Arial, sans-serif; + /* There's an issue with Helvetica Neue Bold's glyph sizing that wrecks the grid. */ + --font-windows-bold: Helvetica, Arial, sans-serif; --root-font-size: 1rem; --base-grid: 1.5625rem; --radius: 4px; @@ -51,7 +71,7 @@ li,p { transform: translateY(7px); } strong { - font-family: Helvetica, Arial, sans-serif; + font-family: var(--font-body); color: var(--foreground-emphasis); font-weight: 700; line-height: 1; @@ -87,7 +107,6 @@ button { .textured { h2, p, ul { - -webkit-text-stroke: calc(8 * var(--border-width)) var(--background); paint-order: stroke fill; } } @@ -253,7 +272,7 @@ main { } } -#services { +.columns { column-gap: calc(2 * var(--base-grid)); row-gap: calc(3 * var(--base-grid)); padding: calc(2 * var(--base-grid)); @@ -264,7 +283,7 @@ main { justify-content: center; flex-wrap: wrap; - section { + article { flex: 1; min-width: calc(13 * var(--base-grid)); max-width: calc(25 * var(--base-grid)); @@ -280,33 +299,11 @@ main { } -#skills, #testimonials { - column-gap: calc(4 * var(--base-grid)); - display: flex; - flex-wrap: wrap; - padding: calc(2 * var(--base-grid)); - row-gap: calc(3 * var(--base-grid)); - width: 100%; - - @media (max-width: 425px) { - padding: calc(2 * var(--base-grid)) var(--base-grid); - } - - section { - flex: 1; - min-width: calc(13 * var(--base-grid)); - - @media (max-width: 360px) { - min-width: calc(100vw - 3 * var(--base-grid)); - } - } -} - -#skills { +.darktexture { background-image: url('/img/darkgrid.svg'); } -#testimonials { +.lighttexture { background-image: url('/img/lightgrid.svg'); } @@ -357,8 +354,11 @@ footer { .window { + font-family: var(--font-windows); + .titlebar { border-bottom: var(--border-width) solid #000; + font-family: var(--font-windows-bold); padding: calc(6 * var(--border-width)) calc(8 * var(--border-width)) calc(6 * var(--border-width)) ; line-height: calc(9 * var(--border-width)); text-align: center; diff --git a/static/font/LibreCaslonText-Italic[wght].woff2 b/static/font/LibreCaslonText-Italic[wght].woff2 new file mode 100644 index 0000000..a771694 Binary files /dev/null and b/static/font/LibreCaslonText-Italic[wght].woff2 differ diff --git a/static/font/LibreCaslonText[wght].woff2 b/static/font/LibreCaslonText[wght].woff2 new file mode 100644 index 0000000..336029c Binary files /dev/null and b/static/font/LibreCaslonText[wght].woff2 differ diff --git a/static/font/Ronzino-Bold.woff2 b/static/font/Ronzino-Bold.woff2 deleted file mode 100644 index 440957c..0000000 Binary files a/static/font/Ronzino-Bold.woff2 and /dev/null differ diff --git a/static/font/Ronzino-BoldOblique.woff2 b/static/font/Ronzino-BoldOblique.woff2 deleted file mode 100644 index 29038fa..0000000 Binary files a/static/font/Ronzino-BoldOblique.woff2 and /dev/null differ diff --git a/static/font/Ronzino-Medium.woff2 b/static/font/Ronzino-Medium.woff2 deleted file mode 100644 index 6161f9c..0000000 Binary files a/static/font/Ronzino-Medium.woff2 and /dev/null differ diff --git a/static/font/Ronzino-MediumOblique.woff2 b/static/font/Ronzino-MediumOblique.woff2 deleted file mode 100644 index 0879928..0000000 Binary files a/static/font/Ronzino-MediumOblique.woff2 and /dev/null differ diff --git a/static/font/Ronzino-Oblique.woff2 b/static/font/Ronzino-Oblique.woff2 deleted file mode 100644 index 0b4e1ac..0000000 Binary files a/static/font/Ronzino-Oblique.woff2 and /dev/null differ diff --git a/static/font/Ronzino-Regular.woff2 b/static/font/Ronzino-Regular.woff2 deleted file mode 100644 index b8763ad..0000000 Binary files a/static/font/Ronzino-Regular.woff2 and /dev/null differ diff --git a/static/img/darkgrid.svg b/static/img/darkgrid.svg index 58c586f..d49ef97 100644 --- a/static/img/darkgrid.svg +++ b/static/img/darkgrid.svg @@ -1,4 +1,4 @@ - - + + diff --git a/static/img/lightgrid.svg b/static/img/lightgrid.svg index e16971b..7f7318c 100644 --- a/static/img/lightgrid.svg +++ b/static/img/lightgrid.svg @@ -1,4 +1,4 @@ - - + + -- cgit