From 7aedf579b462b6a436a2cf8b5bf3d1de5b47529c Mon Sep 17 00:00:00 2001 From: Jonathan Peris Date: Wed, 21 Oct 2026 14:15:39 -0300 Subject: [PATCH] feat: serve the portfolio from www.jonathanperis.tech The custom domain serves the site at the host root, so a repository base path would make every asset 404. Co-authored-by: Cursor --- AGENTS.md | 2 +- README.md | 4 ++-- astro.config.ts | 2 +- public/CNAME | 1 + public/robots.txt | 2 +- public/sitemap.xml | 2 +- src/lib/data.ts | 2 +- src/lib/github.ts | 10 +++++----- wiki/deployment.md | 2 +- wiki/index.md | 4 ++-- wiki/seo_and_analytics.md | 2 +- 11 files changed, 17 insertions(+), 16 deletions(-) create mode 100644 public/CNAME diff --git a/AGENTS.md b/AGENTS.md index e72c90c..774a413 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -2,7 +2,7 @@ Standardized repository instructions for agent harnesses working on this Astro 7 static portfolio (Astro components only, no UI framework runtime), deployed to GitHub Pages. -**Live:** https://jonathanperis.github.io/ +**Live:** https://www.jonathanperis.tech/ **Documentation:** [Index](wiki/index.md) · [Setup](wiki/getting_started.md) · [Deployment](wiki/deployment.md) · [Maintenance map](wiki/index.md#keeping-documentation-current) diff --git a/README.md b/README.md index 9af5932..cd755bf 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ [![Build Check](https://github.com/jonathanperis/jonathanperis.github.io/actions/workflows/build-check.yml/badge.svg)](https://github.com/jonathanperis/jonathanperis.github.io/actions/workflows/build-check.yml) [![Main Release](https://github.com/jonathanperis/jonathanperis.github.io/actions/workflows/main-release.yml/badge.svg)](https://github.com/jonathanperis/jonathanperis.github.io/actions/workflows/main-release.yml) [![CodeQL](https://github.com/jonathanperis/jonathanperis.github.io/actions/workflows/codeql.yml/badge.svg)](https://github.com/jonathanperis/jonathanperis.github.io/actions/workflows/codeql.yml) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) -**[Live site →](https://jonathanperis.github.io/)** | **[Documentation →](wiki/index.md)** | **[Agent guide →](AGENTS.md)** +**[Live site →](https://www.jonathanperis.tech/)** | **[Documentation →](wiki/index.md)** | **[Agent guide →](AGENTS.md)** --- @@ -12,7 +12,7 @@ Astro-native portfolio (no UI framework runtime) with a static export for GitHub Pages. It fetches the repositories pinned on Jonathan's GitHub profile plus owned public, non-fork repositories from the GitHub GraphQL API at build time, resolves live GitHub Pages links through the REST API, and renders them in a "Career Metro Map" UI styled after transit signage (Vignelli / São Paulo Metrô): roles are stations on a Career line, skills and side projects are colored lines, and pinned repositories appear on a departures board. -The site includes a print-optimized [`/resume/`](https://jonathanperis.github.io/resume/) route, SEO metadata, JSON-LD, optional GA4 analytics, a web app manifest, and a Konami-code terminal easter egg. Shared profile and resume data live in [`src/lib/data.ts`](src/lib/data.ts) and feed the portfolio, resume, terminal command table, and JSON-LD; [`src/lib/metro.ts`](src/lib/metro.ts) adds the map vocabulary (lines, stations, coordinates), and some presentation copy is maintained in the Astro components. +The site includes a print-optimized [`/resume/`](https://www.jonathanperis.tech/resume/) route, SEO metadata, JSON-LD, optional GA4 analytics, a web app manifest, and a Konami-code terminal easter egg. Shared profile and resume data live in [`src/lib/data.ts`](src/lib/data.ts) and feed the portfolio, resume, terminal command table, and JSON-LD; [`src/lib/metro.ts`](src/lib/metro.ts) adds the map vocabulary (lines, stations, coordinates), and some presentation copy is maintained in the Astro components. Project data refreshes when the site is rebuilt and deployed. The deployed browser does not fetch GitHub APIs. Without a token, or if the GraphQL fetch fails, the build uses checked-in fallback projects. See [Dynamic Projects](wiki/dynamic_projects.md) for filtering, the 100-repository limit, and Pages URL fallback behavior. diff --git a/astro.config.ts b/astro.config.ts index 96c1b0f..1b6b109 100644 --- a/astro.config.ts +++ b/astro.config.ts @@ -3,7 +3,7 @@ import sitemap from '@astrojs/sitemap'; import tailwindcss from '@tailwindcss/vite'; export default defineConfig({ - site: 'https://jonathanperis.github.io', + site: 'https://www.jonathanperis.tech', outDir: 'out', trailingSlash: 'always', integrations: [sitemap()], diff --git a/public/CNAME b/public/CNAME new file mode 100644 index 0000000..d9c4fbb --- /dev/null +++ b/public/CNAME @@ -0,0 +1 @@ +www.jonathanperis.tech diff --git a/public/robots.txt b/public/robots.txt index 7264bd3..72943b9 100644 --- a/public/robots.txt +++ b/public/robots.txt @@ -1,3 +1,3 @@ User-agent: * Allow: / -Sitemap: https://jonathanperis.github.io/sitemap-index.xml +Sitemap: https://www.jonathanperis.tech/sitemap-index.xml diff --git a/public/sitemap.xml b/public/sitemap.xml index 869bb17..7bf3262 100644 --- a/public/sitemap.xml +++ b/public/sitemap.xml @@ -1,6 +1,6 @@ - https://jonathanperis.github.io/sitemap-0.xml + https://www.jonathanperis.tech/sitemap-0.xml diff --git a/src/lib/data.ts b/src/lib/data.ts index feabcbe..1bde36d 100644 --- a/src/lib/data.ts +++ b/src/lib/data.ts @@ -24,7 +24,7 @@ export const PROFILE = { location: `${ADDRESS.locality}, ${ADDRESS.region}, ${ADDRESS.country}`, github: "github.com/jonathanperis", linkedin: "linkedin.com/in/jonathan-peris", - website: "jonathanperis.github.io", + website: "www.jonathanperis.tech", summary: `Software Engineer with ${YEARS_OF_EXPERIENCE} years of experience specializing in .NET and Fintech solutions. Proven track record architecting and delivering high-impact, enterprise-grade software. Expertise centered on the modern .NET ecosystem including .NET Core+, ASP.NET Core, Entity Framework, and MAUI. Deeply committed to engineering excellence with CQRS, DDD, Microservices, Hexagonal Architecture, and Cloud-Native principles. Strong DevOps background with Azure, Docker, and CI/CD pipelines.`, }; diff --git a/src/lib/github.ts b/src/lib/github.ts index cd5d27e..c589560 100644 --- a/src/lib/github.ts +++ b/src/lib/github.ts @@ -18,12 +18,12 @@ const REQUEST_TIMEOUT_MS = 10_000; const PAGES_LOOKUP_CONCURRENCY = 6; const FALLBACK: GitHubRepo[] = [ - { title: "cpnucleo", description: "Hands-on .NET 10 project-management learning lab: compare REST/gRPC and EF Core/Dapper with Astro, PostgreSQL, OpenTelemetry, and executable contract tests.", url: "https://github.com/jonathanperis/cpnucleo", lang: "C#", langColor: "#7355dd", stars: 9, homepageUrl: "https://jonathanperis.github.io/cpnucleo/", pagesUrl: "https://jonathanperis.github.io/cpnucleo/", pinned: true }, - { title: "super-mango-editor", description: "C11/raylib platformer and visual level editor. Play in the browser via WebAssembly, build TOML worlds, and learn game development with Sandbox School.", url: "https://github.com/jonathanperis/super-mango-editor", lang: "C", langColor: "#555555", stars: 1, homepageUrl: "https://jonathanperis.github.io/super-mango-editor/", pagesUrl: "https://jonathanperis.github.io/super-mango-editor/", pinned: true }, - { title: "solar-system-simulator", description: "Physics-first orbital mechanics lab in C11 and raylib: native and WebAssembly simulations, reproducible A/B experiments, and a source-backed small-body atlas.", url: "https://github.com/jonathanperis/solar-system-simulator", lang: "C", langColor: "#555555", stars: 0, homepageUrl: "https://jonathanperis.github.io/solar-system-simulator/", pagesUrl: "https://jonathanperis.github.io/solar-system-simulator/", pinned: true }, + { title: "cpnucleo", description: "Hands-on .NET 10 project-management learning lab: compare REST/gRPC and EF Core/Dapper with Astro, PostgreSQL, OpenTelemetry, and executable contract tests.", url: "https://github.com/jonathanperis/cpnucleo", lang: "C#", langColor: "#7355dd", stars: 9, homepageUrl: "https://app-cpnucleo.jonathanperis.tech/", pagesUrl: "https://cpnucleo.jonathanperis.tech/", pinned: true }, + { title: "super-mango-editor", description: "C11/raylib platformer and visual level editor. Play in the browser via WebAssembly, build TOML worlds, and learn game development with Sandbox School.", url: "https://github.com/jonathanperis/super-mango-editor", lang: "C", langColor: "#555555", stars: 1, homepageUrl: "https://super-mango-editor.jonathanperis.tech/", pagesUrl: "https://super-mango-editor.jonathanperis.tech/", pinned: true }, + { title: "solar-system-simulator", description: "Physics-first orbital mechanics lab in C11 and raylib: native and WebAssembly simulations, reproducible A/B experiments, and a source-backed small-body atlas.", url: "https://github.com/jonathanperis/solar-system-simulator", lang: "C", langColor: "#555555", stars: 0, homepageUrl: "https://solar-system-simulator.jonathanperis.tech/", pagesUrl: "https://solar-system-simulator.jonathanperis.tech/", pinned: true }, { title: "jonlib", description: "Jonlib: graphics and math libraries written in Bend 2, targeting raylib 6.0 parity.", url: "https://github.com/jonathanperis/jonlib", lang: "Python", langColor: "#3572A5", stars: 0, pinned: true }, - { title: "blazor-mudblazor-starter", description: "Local-first .NET 10 learning sandbox for Blazor Server and MudBlazor, with hands-on labs for state, forms, APIs, SQLite, authentication, localization, CSV, and Docker.", url: "https://github.com/jonathanperis/blazor-mudblazor-starter", lang: "C#", langColor: "#7355dd", stars: 2, homepageUrl: "https://jonathanperis.github.io/blazor-mudblazor-starter/docs/", pagesUrl: "https://jonathanperis.github.io/blazor-mudblazor-starter/", pinned: true }, - { title: "speedy-bird-lynx", description: "Flappy Bird-inspired arcade game built with ReactLynx and TypeScript. Android host, Lynx web preview, playable Canvas demo, and Astro docs; iOS source scaffold included. Every pipe makes it faster.", url: "https://github.com/jonathanperis/speedy-bird-lynx", lang: "TypeScript", langColor: "#3178c6", stars: 1, homepageUrl: "https://jonathanperis.github.io/speedy-bird-lynx/", pagesUrl: "https://jonathanperis.github.io/speedy-bird-lynx/", pinned: true }, + { title: "blazor-mudblazor-starter", description: "Local-first .NET 10 learning sandbox for Blazor Server and MudBlazor, with hands-on labs for state, forms, APIs, SQLite, authentication, localization, CSV, and Docker.", url: "https://github.com/jonathanperis/blazor-mudblazor-starter", lang: "C#", langColor: "#7355dd", stars: 2, homepageUrl: "https://blazor-mudblazor-starter.jonathanperis.tech/demo/", pagesUrl: "https://blazor-mudblazor-starter.jonathanperis.tech/", pinned: true }, + { title: "speedy-bird-lynx", description: "Flappy Bird-inspired arcade game built with ReactLynx and TypeScript. Android host, Lynx web preview, playable Canvas demo, and Astro docs; iOS source scaffold included. Every pipe makes it faster.", url: "https://github.com/jonathanperis/speedy-bird-lynx", lang: "TypeScript", langColor: "#3178c6", stars: 1, homepageUrl: "https://speedy-bird-lynx.jonathanperis.tech/", pagesUrl: "https://speedy-bird-lynx.jonathanperis.tech/", pinned: true }, { title: "rinha2-back-end-dotnet", description: "High-performance backend for the Rinha de Backend challenge — built with ASP.NET 9, PostgreSQL, Nginx, Native AOT, and Docker", url: "https://github.com/jonathanperis/rinha2-back-end-dotnet", lang: "HTML", langColor: "#e34c26", stars: 3, homepageUrl: "https://jonathanperis.github.io/rinha2-back-end-dotnet/", pagesUrl: "https://jonathanperis.github.io/rinha2-back-end-dotnet/" }, { title: "rinha4-back-end-c", description: "Rinha de Backend 2026 C implementation with raw HTTP/1, Unix sockets, SCM_RIGHTS load balancing, and exact IVF fraud scoring", url: "https://github.com/jonathanperis/rinha4-back-end-c", lang: "C", langColor: "#555555", stars: 0, homepageUrl: "https://jonathanperis.github.io/rinha4-back-end-c/", pagesUrl: "https://jonathanperis.github.io/rinha4-back-end-c/" }, { title: "rinha2-back-end-k6", description: "Grafana k6 stress tests for the Rinha de Backend challenge — Dockerized with InfluxDB metrics export", url: "https://github.com/jonathanperis/rinha2-back-end-k6", lang: "JavaScript", langColor: "#f1e05a", stars: 0, homepageUrl: "https://jonathanperis.github.io/rinha2-back-end-k6/", pagesUrl: "https://jonathanperis.github.io/rinha2-back-end-k6/" }, diff --git a/wiki/deployment.md b/wiki/deployment.md index 5aab3ab..b0f6a1f 100644 --- a/wiki/deployment.md +++ b/wiki/deployment.md @@ -77,4 +77,4 @@ Publishing is handled by GitHub Actions; do not commit `out/`. ## Domain -The site is served at `https://jonathanperis.github.io` via GitHub Pages with automatic HTTPS. +The site is served at `https://www.jonathanperis.tech` via GitHub Pages with automatic HTTPS. diff --git a/wiki/index.md b/wiki/index.md index f3082a9..98a497e 100644 --- a/wiki/index.md +++ b/wiki/index.md @@ -2,7 +2,7 @@ Personal developer portfolio for **Jonathan Peris** — Software Engineer with 12+ years of experience in .NET, Azure, backend architecture, and reliable delivery. -**Live site:** [jonathanperis.github.io](https://jonathanperis.github.io) +**Live site:** [www.jonathanperis.tech](https://www.jonathanperis.tech) These are repository-hosted Markdown documents in `wiki/`. GitHub Wiki is disabled; Astro publishes the portfolio and resume, not these documentation pages. @@ -15,7 +15,7 @@ These are repository-hosted Markdown documents in `wiki/`. GitHub Wiki is disabl - **Source tree:** `src/pages`, `src/components`, `src/layouts`, `src/lib`, and `src/styles`. - **Build output:** `out/`, uploaded as a GitHub Pages artifact by `main-release.yml`. - **Data source:** `src/lib/data.ts` for profile/resume/terminal data; `src/lib/metro.ts` for the map's lines and stations (roles looked up from `data.ts`); `src/lib/github.ts` for GitHub repository discovery. -- **Production URL:** `https://jonathanperis.github.io/`. +- **Production URL:** `https://www.jonathanperis.tech/`. ## Features diff --git a/wiki/seo_and_analytics.md b/wiki/seo_and_analytics.md index f6aeb02..23c6c58 100644 --- a/wiki/seo_and_analytics.md +++ b/wiki/seo_and_analytics.md @@ -51,7 +51,7 @@ There are no handwritten page entries, priorities, change frequencies, or `lastm ```txt User-agent: * Allow: / -Sitemap: https://jonathanperis.github.io/sitemap-index.xml +Sitemap: https://www.jonathanperis.tech/sitemap-index.xml ``` ## Google Analytics 4